2010-02-25 6 views

Répondre

20

est ici une façon

unlink("/path/that/does/not/exist"); 
print_r(error_get_last()); 

Voir Error handling pour plus de détails

+0

Je voulais traiter l'erreur par programme, mais pour l'instant je vais juste les connecter en utilisant cette suggestion; - if (@unlink ('xyz.abc') === false) {$ e = error_get_last () trigger_error ($ e ['message'], E_USER_NOTICE); } –

2

Je ne pense pas qu'il soit possible de récupérer le (s) code (s) d'erreur émis par le système. C'est peut-être dû au fait que PHP est supposé être portable, et que différents OS ont des méthodes différentes pour signaler les erreurs.

Vous pouvez bien sûr faire un exec('rm ....') et obtenir le niveau d'erreur mais ce n'est pas très portable, et rend votre application dépend des droits exec().

Sinon, si vous avez vraiment, vraiment besoin de cela, seulement une solution de contournement très hacky vient à l'esprit: Créer un custom error handler function qui tente d'aller chercher la raison de l'échec de l'avertissement unlink jette - par exemple. vérifiez "Permission denied", ou récupérez tout le message d'erreur.

Créez une fonction wrapper autour de unlink qui définit et redéfinit le gestionnaire d'erreurs. Quelque chose comme ceci:

function my_unlink($file) 
{ 
    set_error_handler("my_error_handler"); 
    unlink($file); 
    restore_error_handler(); 

} 

vous obtenez ma dérive.

Si quelqu'un connaît une meilleure solution - Je serais intéressé d'entendre parler aussi ....

1

Cette n'est pas possible, j'en ai peur. Voici le code C qui gère unlink dans php 5.3. Comme vous pouvez le voir, errno n'est pas retourné et il n'y a aucun moyen d'y accéder plus tard.

Il existe déjà un bugreport à ce sujet, mais il ne semble pas attirer trop l'attention. ;)

Voir aussi ce discussion

Questions connexes