2009-08-19 22 views
2

Ich weiß "etwas muss geändert worden sein", aber mein Code scheint ohne Grund über Nacht gebrochen zu haben.php fopen relativer Pfad gebrochen - Mystery

Mein Server Verzeichnisstruktur ist so etwas wie dieses:

/
/scripts
/audit
/other_things

ich ein Skript haben (sagen wir es „/ scripts genannt /MyScript.php ") im Ordner" scripts ", der Daten von einer Webseite mit curl sammelt und eine veraltete Kopie der Webseite speichert, die er im Ordner" audit "liest.

die Audit-Ordner zu schreiben, ich

$ fh = fopen verwendet ("./ Audit/2008-09-09-183000.backup.log", "w");

jedoch, die aufgehört zu arbeiten, werfen

[function.fopen]: failed to open stream: No such file or directory in /home/web/website.co.uk/audit/2008- 09-09-183000.backup.log on line 353

ich aber diese durch den Pfad zu ändern, um

behoben haben

"../audit/2008 usw." von "./audit 2008" (das sind zwei Punkte/Punkte, statt einer)

Logik diktiert, dass etwas in der Serverkonfiguration geändert haben muss, aber was? Es ist ein dedizierter Server, den ich verwalte. Wie kann ich vermeiden, dass so etwas wieder passiert?

Ich habe sogar SVN für MyScript.php durchlaufen und alle früheren Versionen haben die Single verwendet. in dem Weg.

Antwort

7

Verwenden Sie dirname(__FILE__), um den Dateisystempfad für die aktuelle Datei abzurufen. Verwenden Sie dann relative Pfade von dort, um Ihr Verzeichnis audit zu finden.

Zum Beispiel scripts/MyScript.php, dirname(__FILE__) wird /home/web/website.co.uk/scripts zurückgeben. Sie können dazu /../audit zuverlässig anhängen.

(Hinweis: Dies funktioniert sogar in einer include d oder require d datei in diesem Fall wird es das Verzeichnis, in dem die Rückkehr enthielten Datei befindet).

0

Ihr CWD (aktuelles Arbeitsverzeichnis) hat sich geändert, es war das Dokumentenstammverzeichnis und jetzt ist es das Dokument root/scripts.

Das könnte aufgrund des Pfads geschehen sein, der für den Zugriff auf das Skript verwendet wurde, z. B. wenn Sie aufgrund einer URL-Umschreibung oder einer anderen URL zuvor http://website.co.uk/MyScript.php aufgerufen haben und jetzt auf http://website.co.uk/scripts/MyScript.php zugreifen.

Ich kann mich erinnern, dass es andere mögliche Täter gibt, aber ich kann mich jetzt nicht an sie erinnern. Haben Sie sich mit einigen Umschreibregeln oder URLs herumgeschlagen? (dh mit PATH_INFO gestartet?)