Auge: Probleme mit der Funktion file()

Beitrag lesen

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

  1. Dazu passt auch, dass der zweite Fehler zwei Zeilen nach dem ersten auftritt. ↩︎