Il ya beaucoup de fonctions (en fait, les plus) dans le langage PHP qui se fâchent et émettent des avertissements et des avis quand ils n'aiment pas leur entrée - plutôt que de simplement revenir FALSE
(mais ils le font aussi).PHP alternatives à la gestion des entrées malformées au lieu de lancer des erreurs
Un endroit où cela est vraiment commun est dans les fonctions GD et chaîne. Ils sont très pointus sur leurs arguments et il est très facile pour les utilisateurs de ne pas respecter leurs standards.
Par exemple, un utilisateur télécharge une image endommagée (intentionnellement ou non). Résultant des avertissements de la bibliothèque GD.
Jusqu'à présent, il n'y a que trois façons que j'ai trouvé au silence PHP sur cette question:
- Changer votre établissement de rapports d'erreur dans le ini ou at runtime (beurk). Supprimer les erreurs avec le symbole
@
lent. - Modifier erreur de déclaration juste avant/après la fonction:
comme ceci:
$errorlevel=error_reporting();
error_reporting($errorlevel & ~E_NOTICE);
//...code that generates notices
error_reporting($errorlevel);
Naturellement, les deux deuxièmes choix me rendent malade. Ce qui me laisse utiliser 1) et atténuer les paramètres d'erreur PHP. Cependant, je veux que PHP soit en mode strict afin que, pendant que je travaille, je puisse attraper des bogues logiques et une mauvaise forme qui pourrait s'introduire dans mon code. Cependant, je ne veux pas que des erreurs aléatoires soient lancées quand PHP n'aime pas quelque chose.
Y a-t-il un moyen de séparer les erreurs provenant d'arguments malformés (mauvaise entrée) des erreurs de mauvaise programmation? Par exemple:
- Si une image utilisateur est invalide juste retour FALSE et je vais faire face. Je n'ai pas besoin d'avertissements.
- Si le passage d'une ressource d'image à la fonction d'impression est invalide, jetez des avertissements.
Toutes les fonctions GD imagecreate * doivent déjà renvoyer false en cas d'erreur ou utilisez-vous autre chose? – tadamson
@tadamson Beaucoup de fonctions GD jettent aussi un avertissement/notification en plus de renvoyer false: http://us.php.net/manual/fr/function.getimagesize.php – leepowers
@tadamson Comme je l'ai mentionné plus haut, elles retournent FALSE. Cependant, ils lancent aussi E_WARNINGS qui ne peut pas être attrapé juste là et analysé comme une exception ou un résultat booléen. – Xeoncross