Wie der Grund für eine PHP-Datei öffnen Ausfall Ausgang
-
05-07-2019 - |
Frage
Ich versuche, einen großen, veraltet (circa 2001) PHP-Web-Dienst zu debuggen, und ich bin die Begegnung Datei geöffnet Ausfälle. Der fopen Anruf ist in einem eingeschlossenen Modul, der Anrufer meldet sich, dass die Datei nicht geöffnet werden konnte, aber kein Grund protokolliert wird.
Der Code, der tatsächlich die offene tut, ist:
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
Wie kann ich herausfinden, warum fopen gescheitert?
Lösung
Große Antworten wurden bereits genannt, über die Operator @ , aber hier ist ein paar mehr Informationen, die nützlich sein könnten, entweder Sie oder jemand anderes:
- Wenn zum Debuggen, können Sie die Deaktivierung des
@ operator
benötigen, können Sie installieren die Schrei Erweiterung - siehe auch die manuelle - , die wirklich nützlich ist, wenn Sie‘ re eine Art alten Anwendung Aufrechterhaltung nicht gut gestaltet / codiert ^^ - Je nach PHP configuation (wenn die
track_errors
Option aktiviert ist) , haben Sie vielleicht eine href verwenden können <=" http://us.php.net/manual/en/reserved.variables.phperrormsg.php“rel = "nofollow noreferrer">$php_errormsg
die letzte Fehlermeldung zu erhalten.
Unter Berücksichtigung dieses Stück Code:
// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
var_dump($php_errormsg);
}
// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
var_dump($php_errormsg);
}
Sie würde sich dies:
string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)
string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)
So, real, nützlich, sinnvoll, Fehlermeldungen ; -)
Andere Tipps
das @ -Zeichen nicht wegnehmen.
Das @ -Zeichen unterdrückt Fehlermeldungen, so dass er den Fehler Unterdrücken der die Funktion normalerweise geben.
Entfernen Sie die Fehler Suppressor rel="nofollow.