Hallo
[edit] eine Fußnote eingefügt und an zwei Stellen die Wortwahl korrigiert [/edit]
Ich habe mein Script /temp/test.php nochmal erweitert:
<?php accessFile("foo.txt"); accessFile("test.php"); accessFile("/temp/foo.txt"); accessFile("/temp/test.php"); accessFile("temp/foo.txt"); accessFile("temp/test.php"); function accessFile($name) { echo "\naccess $name\n\n"; if (false === ($cont = file($name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES))) echo "\nDat war nix"; else echo "\nHabe ".count($cont)." Zeilen gefunden"; }
/temp/foo.txt gibt es nicht. Ich bekomme konsequent für foo.txt die Warnung und die Ausgabe "Dat war nix".
Und jetzt muss ich wohl einen langhalsigen Wasservogel ververben. In anderen Worten: Mir schwant etwas.
Error spricht (mit eingeschaltetem Error-Reporting) von folgender Ausgabe.
Warning: file(var/log/apache2/example.com/access.log): failed to open stream: No such file or directory in /var/www/example.com/htdocs/log/index.php on line 65
Notice: Array to string conversion in /var/www/example.com/htdocs/log/index.php on line 67 Array
Ich versuche das mal auseinanderzudröseln.
Die Datei existiert nicht, woraus die offensichtliche Warnung resultiert.
Warning: file(var/log/apache2/example.com/access.log): failed to open stream: No such file or directory in /var/www/example.com/htdocs/log/index.php on line 65
Ich war fälschlicherweise davon ausgegangen, dass die Warnung alles ist, aber file
generiert sowohl die Warnung, gibt aber zusätzlich auch false
zurück. Womit wir bei der mutmaßlichen Ursache für die Ausgabe von „Array“ sind.
Notice: Array to string conversion in /var/www/example.com/htdocs/log/index.php on line 67 Array
Die Ausgabe stammt, so vermute ich, nicht von file
, sondern aus der Fehlerbehandlung von Error[1], die laut dem Eröffnungsposting folgendermaßen aussieht.
if (false === ($loglines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)))
{
exit (error_get_last());
}
Der Code springt also sehr wohl in den Fehlerblock und beendet das Skript, wobei mit error_get_last
eine Ausgabe der Ausgabe Fehlermeldungen erzeugt werden soll. Für die Funktion error_get_last
ist als Rückgabewert ein assoziatives Array angegeben. Dieses Array wird mit exit (error_get_last());
aber in einen String umgewandelt, der schlicht „Array“ lautet.
Kein Bug in file
, sondern, wenn ich richtig liege, nur eine falsche Benutzung von error_get_last
.
Tschö, Auge
„Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde
Dazu passt auch, dass der zweite Fehler zwei Zeilen nach dem ersten auftritt. ↩︎