[Def-Astuce] Empecher une fonction PHP de planter le script
Rédigé par Xavier le 15 août 2009 à 16:43.
Astuce très simple mais pourtant tellement importante ! Vous avez une fonction qui, une fois sur deux bloque votre script ? Procédez comme suit :
Ajoutez simplement un arobase « @ » devant votre fonction. PHP utilisera la fonction mais si jamais il y a une erreur, ne la retournera pas et fera comme si de rien était.
Par exemple si je veux supprimer un fichier j’utiliserais « unlink » :
unlink(’monfichier.txt’) ;
Problème, si « monfichier.txt » n’existe pas, PHP me retournera une erreur. Je rajoute donc le @ devant et le tour est joué :
@unlink(’monfichier.txt’) ;
Et vous, vous le saviez ?
8 Commentaires
Flux RSS des commentaires - Faire un TrackBack
Chargement en cours...








Developpeur informatique depuis très jeune, ma grande passion s'est developpée autour du Web. J'espère que vous avez le même plaisir que moi à l'utiliser, si vous ne l'avez pas, mon but est de vous faciliter la tâche le plus possible. J'aime transmettre mon savoir, je propose donc mes services autant que je le peux, bénévolement ou mieux rémunérés. Chaque jour, je continue cette grande aventure qu'est internet, dans mon métier, mais aussi dans mes projets personnels, toujours avec la même éthique collaboratif.
merci pour l’astuce, mais c’est valable pour quelle version de PHP ?
Toutes il me semble, ou au moins depuis la 3
C’est tout de même sacrément sale comme méthode… il vaut mieux gérer l’erreur via les exceptions.
Le @ est à bannir des codes…
Pourquoi sale ?
Parce que tu caches seulement l’erreur, tu ne la traites pas. Un script bien pensé ne devrais pas avoir besoin de cela, un test sur l’existence du fichier dans ton exemple résoudrait le problème
(et si tu ne veux pas afficher l’erreur, un petit log pour te le signaler à toi et voilà)
Pour mon exemple c’est sur. Mais par exemple avec fopen sur un fichier distant, même en test avec if(fopen()) il te retourne l’erreur si tu ne peux pas accéder au fichier. Donc un petit @ est obligatoire.
En effet, avec fopen je suis ok, mais il ne faut pas le faire avec toute les fonctions, uniquement dans très peu de cas. Quand c’est écrit dans le manuel c’est normal par exemple (pour fopen())
Et c’est pour ça que c’est une astuce et pas une recommandation ^^