avec ou sans @

avec ou sans @ - PHP - Programmation

Marsh Posté le 09-12-2004 à 12:35:55    

bonjour,
je me pose depuis quelques temps une question, quelle est la difference par example entre mysql_connect(); et @mysql_connect(); ?
en fait ma question est : a quoi sert l'arobase que l'on peut trouver dans certains tutoriels/scripts ?
merci d'avence de votre reponse.


---------------
Pilouweb.info et Pilou Web Blog
Reply

Marsh Posté le 09-12-2004 à 12:35:55   

Reply

Marsh Posté le 09-12-2004 à 12:37:00    

suppression de l'affichage des warnings


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 09-12-2004 à 12:45:43    

Comme le dit simogeo, ca t'enlève les messages d'erreurs

Reply

Marsh Posté le 09-12-2004 à 13:35:00    

mais ca ne fait rien d'autre ?
faut il le mettre a chaque fois? sur quels lignes de codes faut il le mettre ?


---------------
Pilouweb.info et Pilou Web Blog
Reply

Marsh Posté le 09-12-2004 à 13:40:05    

au contraire, il vaut mieux éviter de s'en servir!
 
Un script bien codé ne devrait pas généré de warning. Si un script génére des warnings, alors c'est au développeur de revoir son code.


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 09-12-2004 à 14:00:50    

simogeo a écrit :

au contraire, il vaut mieux éviter de s'en servir!
 
Un script bien codé ne devrait pas généré de warning. Si un script génére des warnings, alors c'est au développeur de revoir son code.


 
Au contraire, l'enlever voudrais dire que si un hacker arrive a faire générer un plantage a mysql(surcharge ou autre) il pourra recuperer des info qu'il aurait mieux valu ne pas lui donner.
Personnellement j'utilise qqch du genre :
 

Code :
  1. @mysql_query or kill('Erreur MySQL',mysql_error());


 
La fonction kill etant composée d'une partie affichant le "Erreur MySQL", et une autre ecrivant l'erreur mysql dans un ficher accessible uniquement en ecriture, apres ceci, un die(); est lancé.
De la sorte, si qqch plante l'utilisateur n'a pas moyen de savoir quoi que ce soit, alors que moi je peux savoir pourquoi ca plante et corriger le coup

Reply

Marsh Posté le 09-12-2004 à 14:09:51    

+1 à vous 2
 
- en général, on évite de masquer le erreurs, car le mieux pour qu'elle n'arrive pas, c'est d'avoir un code nickel.
 
- il existe cependant des erreur dont on est pas vraiment responsable (bon exemple pour MySQL, ou alors lecture d'un fichier distant sur un serveur qui vient de se planter), dans ce cas on masque l'erreur à la vue du visiteur (ou hacker), et on fait une gestion propre de l'erreur.
 
Sur le site de mon asso, je récupère des infos sur le serveur d'un partenaire, mais si son site est indsiponible, gros warning --> j'utilise @ devant le fopen, et au cas ou le fichier n'est pas trouvé (je teste la longueur de la chaine récupéreé pour voir si elle vaut 0), et ben j'affiche "stats indisponibles..."
Pas de message d'erreur pour l'utilisateur, et une gestion propre de l'erreur derriere ;)
 
------
 
En résumé, vous avez raison tous les 2 (enfin pour moi), faire au maximum sans le @, mais il reste utile (voir indsipensable) parfois :D


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 09-12-2004 à 14:11:04    

esox_ch > ma gestion d'erreur s'opère dans la globalité.
 
en environnement de  dév :

Code :
  1. display_errors = on // php.ini ou via ini_set
  2. error_reporting(E_ALL);


 
en prod :

Code :
  1. display_errors = off // php.ini ou via ini_set


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 09-12-2004 à 14:43:32    

Oui je vois bien simo mais meme en prod il peut y avoir des choses non planifiées, et c'est quand meme mieux d'avoir un petit message d'erreur te disant que qqch a planté plutot que rien non?

Reply

Marsh Posté le 09-12-2004 à 14:53:49    

simogeo a écrit :

esox_ch > ma gestion d'erreur s'opère dans la globalité.
 
en environnement de  dév :

Code :
  1. display_errors = on // php.ini ou via ini_set
  2. error_reporting(E_ALL);


 
en prod :

Code :
  1. display_errors = off // php.ini ou via ini_set



+1

Reply

Marsh Posté le 09-12-2004 à 14:53:49   

Reply

Marsh Posté le 09-12-2004 à 14:55:22    

esox_ch a écrit :

Oui je vois bien simo mais meme en prod il peut y avoir des choses non planifiées, et c'est quand meme mieux d'avoir un petit message d'erreur te disant que qqch a planté plutot que rien non?

Pour ça il faut utiliser les fonctions de gestion d'erreurs intégrées à PHP (cf http://fr.php.net/manual/en/ref.errorfunc.php).
 
Si tu fais ta gestion d'erreurs proprement, tu n'a pas besoin du @.

Reply

Marsh Posté le 09-12-2004 à 15:02:47    

ratibus a écrit :

Pour ça il faut utiliser les fonctions de gestion d'erreurs intégrées à PHP (cf http://fr.php.net/manual/en/ref.errorfunc.php).
 
Si tu fais ta gestion d'erreurs proprement, tu n'a pas besoin du @.


 
+1
 
esox_ch > Pour reprendre ton exemple avec les requêtes SQL. J'ai développé une classe dans laquelle mes méthodes effectuant les requêtes gèrent les erreurs si elles en rencontrent.
(via : http://fr2.php.net/manual/fr/function.error-log.php )


Message édité par simogeo le 09-12-2004 à 15:03:09

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 09-12-2004 à 15:02:55    

En effet la config error_log couplée a un display_errors = off devrait pouvoir remplacer mon systeme ... Pas mal pas mal :)

Reply

Marsh Posté le 09-12-2004 à 15:10:17    

Reply

Marsh Posté le 09-12-2004 à 15:21:12    

Merci beaucoup :) J'ai appris qqch :)

Reply

Marsh Posté le 09-12-2004 à 15:29:56    

Avec plaisir :)
 
Peu de gens, je pense, connaissent ces fonctions (et c'est pas les seules fonctions méconnues).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed