Rolf B: Pfadangaben in PHP für Linux und Windows

Beitrag lesen

Hallo Armin,

offiziell gibt es in PHP die vordefinierte Konstante DIRECTORY_SEPARATOR. Aber scheinbar funktioniert der Vorwärts-Schrägstrich auf allen OS, wo PHP läuft.

Aber solltest mit den Verzeichnisseparatoren etwas vorsichtig sein.

define("TMP_DIR", "var/html/db/");
...
$fp1 = fopen(TMP_DIR . "/tmp1/".$datname1.".txt","wb");

öffnet die Datei var/html/db//tmp1/foo.txt, was von PHP zwar verdichtet wird, aber trotzdem kein richtiger Pfadname ist.

Insbesondere am Beginn eines Pfadnamens ist ein doppelter Directory-Separator semantisch etwas anderes als mittendrin; stell Dir vor, du würdest dies tun:

define("ROOT_DIR", "/");
...
$fp1 = fopen(ROOT_DIR . "/usr/".$datname1.".txt","wb");

Das würde dann zu //usr/foo.txt führen, und unter Windows wäre das ein Zugriff auf einen UNC-Pfad, d.h. er würde die Netzwerk-Ressource usr suchen. Was Unix draus macht weiß ich nicht.

Leider hat PHP keine definierte Funktion zum Kombinieren von Pfaden, d.h. entweder muss man sich da selbst was schreiben oder eben aufpassen, wenn man Pfade zusammenbaut.

Rolf

--
sumpsi - posui - clusi