Jörg Reinholz: "is_writable" schlägt fehl

Beitrag lesen

Ich dachte nicht, dass man auf so viele Dinge achten muss (Betriebssystem, Rechte, Unterscheidung nach Dateieigentümer und Nutzer in Verbindung mit der Rolle von PHP in diesem Zusammenhang,...).

Das hängt im konkreten Fall mit der Fehlermeldung zusammen, die darauf hindeutete, dass womöglich(!) ein Problem mit den Dateirechten vorlag. Die sind nun mal betriebssystemspezifisch.

Ich habe zunächst mein Konstrukt gemäß Deinem Ratschlag umgestellt,

Der Ratschlag bezog sich darauf, dass Deine "Prüfung" mit is_writable() schlicht und einfach zu einem Zeitpunkt erfolgte, an dem das Kind bereits im Brunnen lag, nämlich nach dem fopen() - und ergo nicht sinnvoll ist. Für eine bessere Fehlermeldung kannst Du das is_writable() auch vor file_put_contents() setzen. Allerdings hast Du dann immer noch das Problem, dass (theorethisch) ein paralleler Prozess zwischen Deiner Prüfung und dem eigentlichen schreibenden Zugriff auf die Datei zugreift und diese blockiert - du musst also immer noch prüfen ob file_put_contents() funktionierte.

Noch ein Tipp: Benutze das error_reporting, denn dann hättest Du das auch gesehen. Etwas wie ein:

if ('127.0.0.1'==$_SERVER['REMOTE_ADDR']) {  
   error_reporting(E_ALL);  
} else {  
   error_reporting(0);  
}

könnte dabei helfen, zu unterscheiden ob Dein Skript auf einem Testsystem läuft (der Client ist im konkreten Beispiel der Browser auf dem Localhost) oder auf einen produktiven Server, auf dem das Präsentieren von Fehlern ggf. unerwünscht ist.

Du hast offenbar Defaulteinstellungen benutzt die auch Warnungen ausschließen oder gibts keine Fehler im Dokument aus UND Du hast nicht in die Error-Logs geschaut.

Du solltest Dir beim Entwickeln etwas angewöhnen wie z.B. tail -f /var/log/apache2/error\_log in einer Shell auszuführen, damit Du solche Fehler, Warnungen und Notizen gegebenenfalls sofort siehst, wenn Du das Skript zumm Testen via Browser und Webserver ausgeführt hast.

Auf Linux-Systemen ist das eine sehr gute Methode um PHP zu debuggen. Bei mir läuft das in einem Fenster von Kate (das benutze ich als Editor) mit.

Unter Windows 7 gibt es meines Wissens auch ein Programm zum (Live-)Beobachten von Logfiles, verzeih mir, dass ich dessen Name ich jetzt nicht kenne.

Jörg Reinholz