Utiliser un debugger pour PHP: XDebug

Dans d’autres langages comme ActionScript ou Java, les debuggers sont très utilisés car les affichages successif (echo, var_dump, die, …) pour tracer les valeurs des variables ne peuvent pas forcément être mis en place aussi facilement qu’en PHP.

L’avantage d’un tel outil est aussi de pouvoir avoir un aperçu des objets actuellement actifs en mémoire ou des valeurs de chaque variable à un instant donné dans l’application. Pour ma part, l’utilisation d’un debugger est en train de devenir une obligation pour garantir une bonne qualité de code et pour régler les problèmes rapidement et surement.
L’apprentissage et l’utilisation d’autres langages comme ActionScript démontre aussi l’intérêt d’utiliser les points d’arrêts pour analyser le fonctionnement.

Après plusieurs recherches sur le web et la lecture de retours d’expériences j’ai trouvé, installé et testé Xdebug. Ce debugger PHP gratuit et facile de mise en oeuvre s’interface directement avec Netbeans (mon IDE PHP favori sur Mac…).

Cet outil peut s’installer de différentes façons (vous trouverez la liste ici), la plus simple étant à travers un paquet PECL/PEAR:

pecl install xdebug
pear install xdebug

Il suffit ensuite de modifier le fichier php.ini utilisé sur le système en rajoutant les lignes suivantes:

[xdebug]
zend_extension=[CHEMIN ABSOLU VERS LE FICHIER xdebug.so]
xdebug.file_link_format="txmt://open?url=file://%f&line=%1"
xdebug.remote_enable = on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.rmote_port=9000

xdebug.remote_autostart = 1

Pour que les modifications soient prises en compte au niveau du serveur Apache, il faut redémarrer le serveur web. Démarrer ensuite Netbeans, vous pouvez directement rajouter des points d’arrêts dans vos scripts et analyser le comportement de votre code en lançant le mode d’exécution debug.

Pourquoi ne pas utiliser PHP comme moteur de Template

Pour répondre à cette question, je vais m’appuyer sur un article publié par Fabien Potencier sur le sujet: Templating Engines in PHP. Fabien Potencier est un membre très actif de la communauté symfony, il est aussi le PDG de la société Sensio à l’origine du projet.

Il décrit dans cette article les différentes raisons qui l’ont fait changer d’avis sur les templates PHP. En effet, aujourd’hui, j’utilise souvent PHP pour construire mon HTML rapidement sous la forme de templates simpliste (passage de variable par fonction extract puis utilisation dans un fichier HTML template).

Pour un développeur cette méthode fonctionne à merveille mais n’est pas très souple. Dès que l’on doit rajouter une nouvelle information, il faut repasser dans le HTML, le PHP, parfois le JavaScript pour réorganiser le tout… Rapide me direz-vous? Pas si on remet le template à sa place.

En effet le Template sert normalement à gérer l’affichage des données. En modèle MVC, il est utilisé dans les vues pour mettre en forme les données transmises par le contrôleur. Pour cette raison, un Web Designer peut conscient des technologies PHP doit pouvoir s’approprier facilement les Templates pour les modifier. Il ne devrait pas se soucier des données, de la forme, l’encodage, le découpage, la cesure et tout ce qui s’en suit…

Par rapport à se constat, PHP n’est pas un moteur de Template adapté pour être utilisé dans une équipe de création structurée et multi-compétences. Pour cela des moteurs de Template simples (attention à utiliser pas à réaliser) comme celui utilisé dans le FrameWork Django. Il en éxiste d’autres mais je trouve celui-ci vraiment souple et puissant par rapport à d’autres.

Il utilise une syntaxe et un interpréteur développer spécifiquement pour répondre à la besoin de la création de Templates. Il est possible d’utiliser des variables, de faire des boucles, des conditions booléennes de l’inclusion de fichier, des filtres sur les données (couper quand trop long, mise en minuscules/majscules…). La syntaxe très simple peut être utilisée par n’importe quel public technique non développeur (Monteur, Web Designer, …).

Un éventail des possibilités de ce moteur de template se trouve sur le site: http://www.biologeek.com/django,traduction,web-frameworks/le-langage-de-template-django-pour-les-auteurs-de-templates/

La documentation est accessible directement sur le site du projet Django: http://docs.djangoproject.com/en/dev/ref/templates/builtins/

Gestion des logs d’erreurs dans Apache

Normalement ce post ne devrait pas avoir lieu d’exister vu que le développement, quand il est bien fait ne génère pas d’erreur et tout se passe toujours bien…

Bon redescendons sur terre, les applications web déclenchent des erreurs, qu’Apache récupère dans son fichier de log. Dans certains cas ces fichiers deviennent très gros après un certains temps (ou très rapidement en fonction du développement) ce qui pose quelques problèmes côté serveur comme des lenteurs d’écriture sur disque.

Pour remédier à ce genre de problème ou simplement améliorer les pratiques, il est intéressant de bien savoir gérer les logs Apache. J’ai trouvé un article décrivant brièvement les différentes posssibilité de gestion des logs :
- Personnalisation de la forme
- Niveau du log (Warn, Info, …)
- Emplacement et gestion des fichiers

Vous trouverez cet article rédigé par Web Reference ici.

Revue complète du protocole HTTP

Julien Pauli, contributeur sur Developpez.com a mis en ligne une publication concernant le protocole HTTP et son fonctionnement.

Il détail toutes les possibilités techniques offertes par HTTP (différents types de requêtes, d’erreurs, authentification, …). Je pense qu’en tant que développeur web, ou tout simplement curieux du web, il est très important de savoir comment fonctionne ce protocole.

Tout passe par HTTP (ou presque) aujourd’hui et il est important de bien le connaître pour gérer correctement la sécurité et les transactions sur un site web.

L’article publié par Julien Pauli se trouve à l’adresse suivante: http://julien-pauli.developpez.com/tutoriels/web/http/

Phing: Un outil de build type Ant pour PHP

Phing, PHing Is Not Gnu make,  est une librairie PHP du FrameWork PEAR permettant d’exécuter une suite de commandes plus ou moins complexes tout comme l’utilitaire make pour les languages comme C++.

Elle fonctionne de la même manière que Ant pour Java, c’est à dire qu’un fichier XML décrit les traitements à effectuer et leur séquencement. D’ailleurs, de nombreuses commandes Phing sont inspirées par Ant. La documentation Phing n’est pas très complète mais en mélangeant les deux outils il est tout à fait possible de trouver son bonheur.

Cet outil permet aussi bien de créer une archive (tar.gz, ZIP), une sauvegarde du contenu, un déplacement de fichier, que des tâches beaucoup plus complexes comme le déploiement complet d’une application web. Il peut communiquer directement avec la base de données, faire des traitements sur des fichiers, …
Une fois qu’on a commencé à l’utiliser, on ne peut plus s’en passer… Pour ma part, le confort apporté pour la manipulation des contenus sensibles (sauvegarde + restauration automatisées) est vraiment significatif!

J’ai aujourd’hui créé une commande permettant de créer une version stabilisée d’un site en cours de développement (suppression des répertoires .svn, suppression du contenu, sauvegarde de la base de données). J’ai aussi développé un outil de déploiement permettant de restaurer une version du site à un instant donné ce qui est très pratique quand plusieurs personnes sont amenées à travailler sur le même projet…

Cette bibliothèque s’exécute en ligne de commande et peut s’installer de deux façons:

- Autonome: Les sources sont téléchargeables et peuvent s’exécuter sans l’appui direct du framework PEAR.

- Intégré: Il faut installer PEAR puis exécuter les commandes décrites ici pour installer Phing

Logo de la librairie PEAR Phing

Logo de la librairie PEAR Phing