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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top