M
misterbasti
Hallo allerseits!
Ich bin auf ein ziemlich eigenartiges Problem mit der Funktion file_put_contents() gestoßen.
Es gibt ja die möglichkeit eine Shutdown-Funktion zu registrieren, die beim Beenden des PHP-Scripts aufgerufen wird. Ich nutze diese Funktion um ein paar Laufzeitinfos zu loggen.
Dazu verwende ich zum schreiben file_put_contents().
Das kleine Problem dabei ist, dass die Funktion pro Aufruf zwei statt einer erwarteten Zeile in die Datei schreibt. Gut okay, nachgesehen ob man versehendlich die Funktion zweimal aufruft oder ob die zu schreibenden Daten doppelt vorhanden sind.
Und da wurde ich stutzig.
Denn eben genau diese beiden Fehler habe ich nicht gemacht. Zum Test hab ich mir die Funktion folgendermaßen aufrufen lassen, um jeden Zweifel aus dem Weg zu räumen:
Das Ergebnis war, dass mir die Anzahl der geschriebenen Bytes einmal ausgegeben wurden, was bedeutete, dass die Funktion wirklich nur einmal aufgerufen wurde. Aber dennoch wurden zwei Zeilen in die Datei geschrieben.
Kahm mir da etwas dumm vor, also hab ich ein Testscript geschrieben mit folgendem Inhalt.
Und an der Stelle war ich dann völlig verwirrt.
Denn das Ergebnis war diesmal noch schöner, im Browser wurde mir fein eine Zeile mit der Anzahl der geschriebenen Bytes gezeigt.
Aber es wurde keine Datei geschrieben, es war keine da. O_O
In meiner Verwirrung den Entwicklungsserver neu gestartet -> das Problem blieb.
Nun ist das mit den zwei Zeilen für mein Projekt ja nicht wirklich ein Problem,
schreibt's halt zwei Zeilen, mir erst mal egal.
Aber die Frage ist, wieso sich die Funktion innerhalb des Shutdown-Handlers so verhält?
Von dem zweiten Beispiel mal ganz abgesehen. ._.
Und deswegen der Thread, ich hab nichts dazu bei Google gefunden, vielleicht weiß ja jemand von euch etwas Genaueres darüber?
Ich hab das ganze unter WAMPP und auf einem Linuxserver getestet, das Problem mit den zwei Zeilen blieb bei beiden Servern. Das zweite besipiel habe ich nur unter WAMPP getestet. Beide verwenden die PHP Version 5.3.8 .
Ich hoffe jemand weiß etwas darüber, ich bin mit meinem Latein am Ende.
Ich bin auf ein ziemlich eigenartiges Problem mit der Funktion file_put_contents() gestoßen.
Es gibt ja die möglichkeit eine Shutdown-Funktion zu registrieren, die beim Beenden des PHP-Scripts aufgerufen wird. Ich nutze diese Funktion um ein paar Laufzeitinfos zu loggen.
Dazu verwende ich zum schreiben file_put_contents().
Das kleine Problem dabei ist, dass die Funktion pro Aufruf zwei statt einer erwarteten Zeile in die Datei schreibt. Gut okay, nachgesehen ob man versehendlich die Funktion zweimal aufruft oder ob die zu schreibenden Daten doppelt vorhanden sind.
Und da wurde ich stutzig.
Denn eben genau diese beiden Fehler habe ich nicht gemacht. Zum Test hab ich mir die Funktion folgendermaßen aufrufen lassen, um jeden Zweifel aus dem Weg zu räumen:
PHP:
echo file_put_contents('runtime.log', "zeile\n", FILE_APPEND) .'<br>';
Das Ergebnis war, dass mir die Anzahl der geschriebenen Bytes einmal ausgegeben wurden, was bedeutete, dass die Funktion wirklich nur einmal aufgerufen wurde. Aber dennoch wurden zwei Zeilen in die Datei geschrieben.
Kahm mir da etwas dumm vor, also hab ich ein Testscript geschrieben mit folgendem Inhalt.
PHP:
<?php
function Shutdown(){
echo file_put_contents('test.txt', 'zeile', FILE_APPEND) .'<br>';
}
register_shutdown_function('Shutdown');
?>
Und an der Stelle war ich dann völlig verwirrt.
Denn das Ergebnis war diesmal noch schöner, im Browser wurde mir fein eine Zeile mit der Anzahl der geschriebenen Bytes gezeigt.
Aber es wurde keine Datei geschrieben, es war keine da. O_O
In meiner Verwirrung den Entwicklungsserver neu gestartet -> das Problem blieb.
Nun ist das mit den zwei Zeilen für mein Projekt ja nicht wirklich ein Problem,
schreibt's halt zwei Zeilen, mir erst mal egal.
Aber die Frage ist, wieso sich die Funktion innerhalb des Shutdown-Handlers so verhält?
Von dem zweiten Beispiel mal ganz abgesehen. ._.
Und deswegen der Thread, ich hab nichts dazu bei Google gefunden, vielleicht weiß ja jemand von euch etwas Genaueres darüber?
Ich hab das ganze unter WAMPP und auf einem Linuxserver getestet, das Problem mit den zwei Zeilen blieb bei beiden Servern. Das zweite besipiel habe ich nur unter WAMPP getestet. Beide verwenden die PHP Version 5.3.8 .
Ich hoffe jemand weiß etwas darüber, ich bin mit meinem Latein am Ende.
Zuletzt bearbeitet von einem Moderator: