Rolf B: Probleme mit der Funktion file()

Beitrag lesen

Hallo Auge,

da steht:

Return Values

Returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached. Upon failure, file() returns false.

Errors/Exceptions

Emits an E_WARNING level error if the file does not exist.

Man kann nun fragen, was "upon failure" bedeutet. Ist der Zugriff auf eine nicht existierende Datei ein Scheitern?

In meinem Testscript gab file() entweder die Warnung aus und false zurück, oder sie gab keine Warnung aus und den Dateiinhalt zurück. Ich würde deshalb behaupten: "file does not exist" impliziert "upon failure".

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". Für test.php bekomme im Aufruf 2 und 4 Erfolg, wenn /temp das aktuelle Verzeichnis ist, und im Aufruf 4 und 6 Erfolg, wenn / das aktuelle Verzeichnis ist. Also das, was man erwarten sollte.

Das habe ich mit PHP auf der Kommandozeile und als FCGI-Anwendung unter IIS gemacht. Mit PHP 7.4.28 und mit PHP 8.1.4 (das sind die, die auf meinem PC zum Testen rumfliegen). Ich lad's aber auch gleich auf meinen Webserver hoch.

Rolf

--
sumpsi - posui - obstruxi