|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 797 ![]() |
Salut,
j'ai l'habitude de ne jamais utiliser le @ pour l'affichage de variables mais plutôt isset() : Code :
<?php echo isset($_GET['var']) ? $_GET['var']) : '';?> éclaircit pas mal le code. Savez-vous si le @ est voué à disparaître dans les prochaines versions de PHP ou s'il peut poser problème ? Est-ce que vous l'utiliser ? Merci d'avance. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Je proscrit l'utilisation du @
On ne désactive jamais les erreurs ! De plus tes deux codes ne sont pas strictement équivalent. Car '' n'est pas === à false Preuve que ce @ est utilisé bien trop abusivement
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Mr N. >> pour revenir au isset car c'est beaucoup mieux que @
il parait que le isset provoque une erreur en PHP5 ? vrai ? faux ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Je sais pas, j'utilise pas php5
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() |
Je ne vois pas en quoi utiliser le @ pose un problème? Je vois plutôt un avantage au point de vue sécurité.
Je précise aussi qu'à chaque fois que je l'utilise je redirige les erreurs qui pourraient être générées vers un fichier log de telle sorte que je suis le seul à en prendre connaissance et non les internautes. Donc, je vote oui pour le @ |
|
|
01
|
|
|
#6 |
|
Membre émérite
![]() Inscription : août 2006 Messages : 943 ![]() |
Lol
Pour rediriger les erreurs vers un log, je suppose que tu utilise la classe "exception", avec un piti "throw new exception" ? Certe, c'est bien.... En Objet !!!! (lol, vieille chamaille entre en Zyongh et moi entre l'utilisation du procédural et de l'objet.... Bref, le @ je dis non pour le procédurale, mais si effectivement ca peut apporter des améliorations de sécurité comme l'utilise Zyongh, alors chui pour !!!
__________________
Veni Vidi Vici ------------------------- Mes articles : developpez.com ou bien vbview.net ------------------------- Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!! Et aussi : --> pear_manual_fr.chm!!! Ou encore : --> Les tutoriaux & cours PHP de Développez.com ------------------------- |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
Je te propose de faire un test. - Tu observes ton fichier de log ("tail -f /var/log/httpd/error_log" chez moi sur *nix) - Tu crées un fichier contenant une erreur du genre : - Tu appelles ce script dans ton navigateur, et tu observes ton fichier de logs : Code :
[client X.X.X.X] PHP Fatal error: Call to undefined function: test_error() in www/test_error.php on line 2 Le but de @ est d'invalider les erreurs et de retourner false à la place. Pour ton besoin, tu dois utiliser display_errors=off, pas @
__________________
Get your motor runnin' Head out on the highway... |
|
|
|
00
|
|
|
#8 | ||
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 71 ![]() |
Perso, je déconseille vivement l'utilisation du @ (sauf très rares exceptions... typiquement dans la fonction qui gère les erreurs)
Je confirme ce que dis Mr N : les erreurs ignorées via @ ne sont pas logués Djakisback, si tu aimes le @ pour la syntaxe... pourquoi tu ne fais pas une fonction ? Code :
|
||
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Citation:
on parlait de isset et de array_key_exist ... car en PHP5 isset générait une erreur de notice ... Voila.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
je pense que zyongh parlait plutot d'une syntaxe comme ca :
Code :
@methode() or logError("error on methode() at ".__FILE__); en fait l'utilisation de @ doit etre reservé a des gens qui SAVENT ce qu'ils font, et n'est pas pour le débutant... mais c'est quand meme bien pratique de pouvoir masquer les erreurs d'une fonction si on a bien conscience que la fonction PEUT generer une erreur et que notre code DOIT gerer ce cas derriere. Parmis les formes les plus communes que j'utilise : Code :
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
||
|
|
00
|
|
|
#11 | |||||||
|
Membre éclairé
![]() |
Citation:
Aucune vérification du contenu. S'il s'agissait simplement d'éclaircir le code, autant faire une fonction : Code :
En passant @ devant une fonction, on met automatiquement l'error_reporting() sur 0, donc la fonction d'erreur de PHP n'affiche pas l'erreur. On peut le voir facilement avec ce code : Code :
Cependant @ est utile dans pas mal de cas (notament là où on veut faire des api portables, ou bien si on veut dissimuler un warning qu'on traite cependant juste après différement). Par exemple : Code :
__________________
Testez le forum Fire Soft Board, un forum libre, gratuit et français. Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP. |
|||||||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Même dans ce cas on peut s'en sortir autrement :
Code :
__________________
Get your motor runnin' Head out on the highway... |
||
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
pour le cas du fopen...
imagine que tu as du fopen($fichier, 'a'), si tu veux faire tout les tests necessaires il te faut au moins : * file_exists() * is_writeable() * is_writeable() sur le dossier parent et encore, comme ce n'est pas une opération atomique, tu ne peut pas gerer le cas de l'acces concurrentiel par un autre thread au meme fichier ou dossier (genre suppression du repertoire entre le test et le fopen) sans alourdir encore avec des flock de partout. sans oublier clear_stat_cache pour bien finir de plomber les perfs ;o) Bref, je prefere 1000 fois un beau : Code :
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
||
|
|
00
|
|
|
#14 | ||
|
Membre éclairé
![]() |
Sauf qu'en cas d'erreur tu ne sauras pas d'où ça vient.
Alors qu'avec : Code :
__________________
Testez le forum Fire Soft Board, un forum libre, gratuit et français. Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP. |
||
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
rien ne t'empeche de faire les tests a posteriori si tu veux vraiment du code propre :
Code :
Ce dernier code est donc : * optimisé * sécurisé * propre * ET utilise intelligement @ ;o)
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
||
|
|
00
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
__________________
Get your motor runnin' Head out on the highway... |
|
|
|
00
|
|
|
#17 | |
|
Membre chevronné
![]() |
Pour toutes les astuces, on peut toujours trouver du code de m... pour démontrer le contraire!!!
J'utilise le @ de telle façon que primo: le warning est invisible à l'écran pour l'utilisateur et secundo: j'envoie un message d'erreur perso et codé dans un fichier de log. Genova: Citation:
C'est évident que ce genre d'utilisation est totalement inutile/ |
|
|
|
01
|
|
|
#18 |
|
Membre émérite
![]() |
Pour ma part j'utilise @ aussi quand je veux personnaliser le message d'erreur pour l'utilisateur. Principalement dans la gestion des fichiers
__________________
Le . est la base de toute bonne concaténation, marre de voir des echo "Mavar1 = $toto et Mavar2 = $titi"; ou pire echo 'Mavar1 = ',$toto,' et Mavar2 = ',$titi; pratiquez plutôt le echo 'Mavar1 = '.$toto.' et Mavar2 = '.$titi; |
|
|
00
|
|
|
#19 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
Si tu peux trouver du code (tout court Citation:
__________________
Get your motor runnin' Head out on the highway... |
||
|
|
00
|
|
|
#20 | |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 797 ![]() |
Salut et merci pour ces retours
A vrai dire ce qui m'intéresse surtout c'est l'utilisation du @ dans le cas d'un affichage d'une variable seulement si elle existe : Par contre si en faisant ca : <?php echo @$_GET['var'];?> le warning n'apparaît pas mais qu'il est quand même écrit dans le log, c'est clair que c'est nul. Citation:
Euh ok, j'avais pas tilté, en effet le <?php echo @$_GET['var'];?> est un très mauvais exemple, aucune vérif de contenu. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com