Frage zu Pfaden!?

firstlord18

Erfahrenes Mitglied
Hi,

so, habe heute nen kleines Problem mit Pfaden:

Ich habe folgende Ordnerstruktur:

myScript/cfg.inc.php
myScript/libs/
myScript/libs/class1.php
myScript/libs/class2.php
myScript/tpl/header.html
myScript/tpl/footer.html
myScript/tpl/style.css

so, in der Datei cfg.inc.php wird alles wichtige festgelegt bzw includet (sprich die Klassen).

So angenommne ich habe eine Datei test.php im Verzeichnis myScript, und include die cfg.php klappt ja alles wunderbar.

Dann will ich halt den Header darstellen, klappt auch.

So, angenommen aber ich lege ne Datei in das übergeordnete verzeichnis von myScript ab, und includet die cfg.php klappt das includen von den klassen etc auch noch gut ;)

Was nicht mehr : der Pfad zur style.css, weil in der header.html nur als Pfad zu style.css steht:
tpl/style.css
(also das würde praktisch nur , wenn man seine ganzen Dateien immer im Hauptverzeichnis von des Scripts (also in myScript/) hätte.

Das ist natürlich blöd.

Deswegen habe ich nun folgendesn gemacht:

in der cfg.php:

Code:
if(!defined('CFG_PATH'))
	DEFINE('CFG_PATH', './');

$cfg['mainDir'] = CFG_PATH;

und so sieht dann der Header.html aus:

Code:
<link rel="stylesheet" href="{maindir}tpl/style.css" type="text/css" />

wobei ich nun bei jedem Anzeigen des Headers {maindir} in der header.html durch $cfg['mainDir'] ersetzte!

Dann muss man halt immer folgendes in seine Datei schreiben, wenn man das Script aus nem anderen verzeichnis als aus dem Ordner myScript aus includet:

Code:
define('CFG_PATH', './folder1/folder2/myScript/');
include(CFG_PATH.'cfg.inc.php');

So, und nun wollte ich fragen, ob man das auch irgendwie anders, besser lösen könnte, sodass der User garnichts mehr machen muss. Also dass irgendwie der Pfad von der Datei, in die die cfg.php includet wird, zur Datei cfg.inc.php automatisch ermittelt wird, sodass man nur noch
Code:
include('folder1/folder2/cfg.inc.php);
machen muss und dann halt automatisch {mainDir} in der header.html durch ./folder1/folder2/ ersetzt wird :)

Danke im voraus!
 
hm, ja einierseits schon. aber wie bekomme ich den absoluten pfad raus?
bzw der muss ja dann auch wieder irgendwo vom user festgelegt werden, oder nicht?
 
Gib einfach den Pfad zu Stylesheet-Datei absolut an:
PHP:
define('CFG_PATH', preg_replace('|(?<=/)[^/]*$|', '', $_SERVER['PHP_SELF']));
 
Cool, danke. Ich glaube so ist das noch etwas besser:

PHP:
define('CFG_PATH', str_replace(basename($_SERVER['PHP_SELF']), "", preg_replace('|(?<=/).*$|', '', $_SERVER['PHP_SELF'])));

Dann habe ich den Pfad zum Hauptverzeichnis meines Scripts und kann darüber auf alle weiteren untergeordneten Dateien zugreifen, doer?

Kann ich den absoluten Pfad für alles nutzten (fopen, fread, link, <img src="">, include) oder das irgendwo nicht? :)
 
Wenn ich es so mache, wie in meinem letztemn Post gesagt (alos mit deiner korrigierten Version) spuckt mir meine Templateklasse immer ein Fehler aus, da sie ja über diesen Pfad die Templates einließt.
Kann fopen() und solche Functionen nicht mit dem absoluten Pfad arbeiten?
 
Zurück