2009-07-30 5 views
9

J'essaye de déboguer un énorme service web PHP obsolète (vers 2001) et je rencontre des échecs de fichiers ouverts. L'appel fopen est dans un module inclus, l'appelant enregistre que le fichier n'a pas pu être ouvert mais aucune raison n'est en cours de journalisation.Comment afficher la raison d'un échec du fichier PHP

Le code qui en fait l'ouverture est:

// 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é?

Répondre

1

réponses Great ont déjà été données, au sujet de la @ operator, mais voici quelques autres informations qui pourraient être utiles, que ce soit pour vous ou quelqu'un d'autre:

  • Si, à des fins de débogage, vous avez besoin de désactiver le @ operator, vous pouvez installer le scream extension- voir aussi the manual- qui est vraiment utile lorsque vous maintenez une sorte d'ancienne application non bien conçu/code ^^
  • en fonction de votre PHP configuation (si le track_errors option est activée), vous pourriez être en mesure d'utiliser $php_errormsg pour obtenir le dernier message d'erreur.

Considérant ce morceau de code:

// This file doesn't exist 
if ([email protected]('/tmp/non-existant-file.txt', 'r')) { 
    var_dump($php_errormsg); 
} 

// My Apache server doesn't have the right to read this file 
if ([email protected]('/tmp/vboxdrv-Module.symvers', 'w')) { 
    var_dump($php_errormsg); 
} 

vous obtiendrez 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, réelles, utiles, significatifs, messages d'erreur ;-)

9

Retirez le signe @. Le signe @ supprime les messages d'erreur, de sorte qu'il supprime l'erreur que la fonction devrait normalement provoquer.

Questions connexes