Domanda

Sto provando a eseguire il debug di un servizio Web PHP enorme, antiquato (circa 2001) e sto riscontrando errori di apertura dei file. La chiamata fopen si trova in un modulo incluso, il chiamante sta registrando che il file non può essere aperto ma non viene registrato alcun motivo.

Il codice che effettivamente fa aprire è:

  // Read the file
  if (!($fp = @fopen($fileName, 'rb'))) {
    $errStr = "Failed to open '{$fileName}' for read.";
    break; // try-block
  }

Come posso scoprire perché il fopen è fallito?

È stato utile?

Soluzione

Sono già state fornite ottime risposte, riguardo al @ operator , ma ecco un paio di ulteriori informazioni che potrebbero essere utili, a te o a qualcun altro:

  • Se, per scopi di debug, è necessario disabilitare @ operator , è possibile installare estensione urlo - vedi anche il manuale - che è molto utile quando si mantiene una sorta di vecchia applicazione non ben progettata / codificata ^^
  • A seconda della tua configurazione PHP (se track_errors è attivata) , potresti essere in grado di usare $ php_errormsg per ottenere l'ultimo messaggio di errore.

Considerando questo pezzo di codice:

// 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);
}

Otterresti questo:

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)

Quindi, messaggi di errore reali, utili, significativi ;-)

Altri suggerimenti

Elimina il segno @.

Il segno @ sopprime i messaggi di errore, quindi sopprime l'errore che la funzione normalmente darebbe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top