Question

J'essaie de déboguer un énorme service Web PHP obsolète (environ 2001) et je rencontre des échecs d'ouverture de fichier. L’appel fopen est dans un module inclus, l’appelant enregistre que le fichier n’a pas pu être ouvert mais aucune raison n’a été enregistrée.

Le code qui ouvre réellement est le suivant:

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

Comment puis-je savoir pourquoi Fopen a échoué?

Était-ce utile?

La solution

D'excellentes réponses ont déjà été données concernant @ opérateur . , mais voici quelques informations supplémentaires qui pourraient vous être utiles, à vous ou à quelqu'un d'autre:

  • Si, pour le débogage, vous avez besoin de désactiver l’opérateur @ , vous pouvez installer le extension scream - voir aussi le manuel - ce qui est vraiment utile lorsque vous maintenez une sorte d’ancienne application mal conçue / codée ^^
  • En fonction de votre configuration PHP (si le track_errors est activée) , vous pourrez peut-être utiliser $ php_errormsg pour obtenir le dernier message d'erreur.

Considérant ce morceau de 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);
}

Vous obtiendriez ceci:

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)

Ainsi, les messages d'erreur réels, utiles, significatifs, ; -)

Autres conseils

Supprimez le signe @.

Le signe @ supprime les messages d'erreur, il supprime donc l'erreur que la fonction donnerait normalement.

Supprimez le suppresseur d'erreur .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top