Robert B.: Pfadangaben in PHP für Linux und Windows

Beitrag lesen

Hallo Armin,

Diese festen Pfade werden über Konstanten definiert, z.B.:

define("TMP_DIR", "var/html/db/");
define("XML_DIR", "var/XML/");

Kleiner Hinweis: Das ^^^^^^ sind relative Pfadangaben.

$fp1 = fopen(TMP_DIR . "/tmp1/".$datname1.".txt","wb");
$fp2 = fopen(TMP_DIR . "/tmp2/".$datname2.".txt","wb");

$xmlfile_query = XML_DIR.'/template/query/'.$active_msconfig.'.xml');
$xmlfile_edit = XML_DIR.'/template/edit/'.$active_msconfig.'.xml');

Ich hoffe, dass du hier zuvor geprüft hast, ob die Variablen sinnvolle und gültige Zeichen enthalten.

Wie muss ich diese Pfadangaben nutzen damit das auch zuverlässig unter Windows läuft?

Der Slash funktioniert auch unter Windows. Absolut korrekt (es kann ja auch Dateisysteme geben, die weder / noch \ als Pfadtrenner verwenden) ist die Verwendung der PHP-Konstanten DIRECTORY_SEPARATOR.

Muss ich hier alles mit Backslashes abhandeln bzw. was mache ich wenn ein User in der Konfiguration es mal mit Slash mal mit Backslash einträgt? Oder mal mit Doppel Backslah etc. Ich habe es ausprobiert, es läuft ja anscheinend auch gemischt, aber ist das zuverlässig?

define("TMP_DIR", "C:\\Inetpub\db\\");
define("XML_DIR", "C:\Inetpub\\xml\\");

Im String-Kontext hat der Backslash eine besondere Bedeutung, die dir in deinem Beispiel zufällig nicht auffällt. Aber probier mal den Unterschied zwischen

echo "C:\neuer ordner";
echo "C:\\neuer ordner";

Viele Grüße
Robert