17 mars 2007

Gérer les erreurs système et logiciel dans une application php / PXXO

Pxxo_Widget_Error

La gestion des erreurs système et logiciel dans une application est trop souvent négligée. pourtant, un grand nombre de fonction PHP et la majorité des méthodes des classes PEAR peuvent ne pas fonctionner et renvoyer un code erreur. Bien sur dans la majorité des cas tout fonctionne, malgré tout un développeur consciencieux se doit de gérer tout les cas. Pour cela PHP fournit plusieurs mécanismes qui permettent d'attraper, gérer et collecter ce type d'erreur. Pxxo va encore plus loin en proposant en plus de gérer l'affichage de l'erreur à l'attention de l'utilisateur final.

Le widget Pxxo_Widgets_Error, qui s'utilise uniquement dans un autre widget Pxxo, permet d'attraper et collecter des erreurs tout en garantissant que l'interface reste propre et professionnelle.

Exemples

Attraper une erreur en fonction d'un booléen


$retour = fopen('unfichier.txt', 'r');
Pxxo_Widgets_Error::catch_false($retour, 'fichier impossible à lire',
E_USER_WARNING);

Attraper une erreur en fonction d'un objet PEAR_Error


$retour = DB::connect($dsn);
Pxxo_Widgets_Error::catch_pear($retour, E_USER_ERROR);

Détails

A chaque fois que l'on souhaite attraper une erreur on définit le niveau de sévérité de l'erreur, ce qui influencera l'affichage et l'exécution.

  • E_USER_ERROR : Provoque l'arrêt du script et la génération d'une page d'erreur, le détail de l'erreur est masqué sauf si on est en mode debug
  • E_USER_WARNING : Provoque la création d'un message, le détail de l'erreur est masqué sauf si on est en mode debug
  • E_USER_NOTICE : Provoque la création d'un message, le détail de l'erreur est toujours affiché

On peut aussi configurer la collecte des erreurs lorsque l'on ne se trouve pas en mode debug. Pour cela on utilise 3 paramètres fournit par Pxxo_Config :

  • error_log_type
  • error_log_destination
  • error_log_extras

Chacun de ces paramètres correspond aux paramètres de la fonction PHP :
error_log

Pour voir concrètement ce widget en action je vous invite à vous rendre sur le site démo. Une erreur E_USER_ERROR, s'enclenche de manière aléatoire, avec un peu de chance vous tomberez dessus ;-) :

02 mars 2007

Comment savoir si un numéro de port est actif Comment savoir si un numéro de port est actif ?

...ou si un service réseau est démarré.

netcat

avec l'utilitaire netcat il suffit de taper :


netcat locahost 80

pour savoir si le serveur http de votre machine fonctionne.

telnet

on peut aussi utiliser telnet :


telnet localhost 80