Injection SQL sur les radars automatiques!

    12:21 23 03 2010

On ne le répète jamais assez, il ne faut jamais faire confiance aux données en provenance des utilisateurs.
Et l’origine de ces données ne se limite pas à POST et GET!

Des petits malins se sont inspirés de cet adage pour tenter t’attaquer les radars fixes :

injection sql radar fixe

injection sql radar fixe

Bien sûr, je pense qu’il s’agit plus d’une blague que d’une véritable tentative d’attaque mais je trouve l’idée vraiment inventive.

Source : http://www.tux-planet.fr/comment-pirater-un-radar-automatique/



Microsoft Web Development Summit 2009

    02:55 5 12 2009

Je viens donc de passer plusieurs jours à Redmond / Seattle invité par Microsoft pour participer au Web Development Summit, un évènement regroupant une trentaine de personnes du monde PHP afin d’échanger avec les équipes des produits web de Microsoft sur les synergies possibles entre nos deux mondes.

Parmi les invités :
Cal EVANS, Andrei ZMIEVSKI, Marco TABINI, Ben RAMSEY, Alison GIANOTTO, David COALLIER, Elizabeth M. SMITH, Ligaya TURMELLE, Maarten BALLIAUW, etc… (désolé pour ceux que je n’ai pas cités).
Vous allez me dire : « Et qu’est ce que tu faisais là bas toi? ». Figurez vous que j’y ai été invité par Hank JANSSEN qui a activement participé à la refonte de PHP 5.3.0 sous Windows et que j’ai pu rencontrer dans le cadre de WampServer.

Au niveau du contenu, les deux jours et demi de conférences ont été très riches. Nous y avons beaucoup parlé des efforts faits par Microsoft pour recoller aux réalités du marché et offrir une vraie solution de production/développement pour les applications web PHP. Cette conférence était vraiment organisée comme une grande session d’échange, la moitié des conférences étaient donc animées par Microsoft, l’autre moitié par des personnes de la communauté.

Voyons un peu ce que j’y ai appris de Microsoft :

Commençons par la solution Web PI, sorte de WampServer pour IIS qui permet d’installer simplement un environnement et des applications PHP.L’outil , pour le moment, s’adresse plus à des utilisateurs finaux de solutions packagées (genre WordPress) qu’à des développeurs. Toutefois les échanges ont été très riches et je suis persuadé que les remarques faites par les participants seront prises en compte (choix de versions, plusieurs instances en parallèle, etc…).
De mon point de vue, bien que très utile pour une certain type d’utilisateurs, cet outil ne sera pas adopté par les développeurs PHP. Ceux-ci viennent de la plateforme LAMP et souhaitent pouvoir retrouver leurs petits sous Windows. Il ne faut pas trop en demander, changer d’OS, changer de serveur web…et pourquoi pas abandonner MySQL au profit de SQL Server tant qu’on y est!
Par ailleurs, de par son fonctionnement en fast-cgi, IIS n’offre pas le même mode de fonctionnement que Apache, Il faut donc que Microsoft s’ouvre encore plus et accepte qu’une plateforme web sur Windows doit être plus de type WAMP que de type WIMP (Windows, IIS, MySQL, PHP) ou WISP (la même chose avec SQL server). J’en ai discuté avec quelques personnes chez Microsoft qui se sont révélées très ouvertes à cela, nous avons même évoqué la possibilité de faire tourner WEB PI sur WampServer, on verra si il y a une suite.

Wincache : les équipes Microsoft ont fait le constat qu’il n’existait pas d’extension de cache d’opcode qui soit efficace et vraiment stable sous Windows. Ils se sont donc retroussées les manches et ont développé l’extension wincache.
Les points positifs :
- wincache permet de faire du cache d’opcode de façon optimisée sous Windows
- wincache est sous licence Open Source et a été intégré à PECL, signe que Microsoft est vraiment dans un processus d’ouverture.

Les points négatifs :
- les binaires de wincache ne sont disponibles qu’en VC9, donc impossible a tester avec les versions actuelles d’apache
- de toute façon, l’extension n’existe pas encore en thread-safe, donc impossible de la faire fonctionner avec Apache 2.2

Là encore, j’ai longuement parlé de cela avec Ruslan Yakushev, responsable du projet chez Microsoft, et j’ai bon espoir d’avoir été entendu et que ces deux points seront ajoutés dans leur roadmap.

PowerShell : Il s’agit d’un invité de commande étendu pour Windows afin de proposer des possibilités plus proche d’un shell Linux aux développeurs. J’avoue ne pas avoir tout compris, la session était en fin de journée et le décalage horaire et la journée à parler en Anglais ont eu raison de moi. Ça a tout de même l’air intéressant, il faudra que j’y jette un coup d’œil quand j’aurais le temps.

Nous avons également eu une présentation des projets interopérabilité en cours par Jean-Christophe Cimetiere et son équipe. J’avais pu assister à un conférence à peu près identique, il y a trois ans, lors de ma première participation et je doit avouer que l’évolution est importante. Bien sûr, Microsoft reste une société à but lucratif et leur implication dans ce genre de projets va dans le sens de leurs intérêts, mais on ne peut pas nier qu’il y a maintenant du concret, de véritables solutions utilisables (contrairement à ce que j’avais pu voir il y a 3 ans). Par ailleurs, la langue de bois à disparu, on ressent clairement que les équipes ont une marge de manœuvre plus importante et que tout cela n’est pas qu’une histoire de marketing et de gestion d’image.

Aiiiiieeeee, qui vient de me lancer une pierre???

Oui, je sais, ca sens le vendu, ca a le gout du vendu mais non, ce n’est pas du vendu, Microsoft ne m’a pas payé pour que j’écrive tout cela. J’ai vraiment le sentiment que de très gros effort sont faits de leur côté et ce serait vraiment un manque d’ouverture que de ne pas les prendre en compte et de tout dénigrer simplement par ce que c’est Microsoft.
C’est quand même en partie grâce à eux et à leur financement que nous avons toujours une version de PHP pour Windows et, qui plus est, certainement la version la plus efficace qu’il n’y ait jamais eu (la version Windows de PHP a failli disparaître avec PHP 5.2.6).

Bien sûr, il y a eu d’autres conférences et choses présentées, mais soit :

1. elles étaient d’ordre plus philosophiques et donc difficiles à retranscrire

2. elles étaient sous NDA, je n’ai donc pas le droit d’en parler

3. elles étaient inintéressantes, comme la présentation de la fondation Codeplex qui a été proche du fiasco, les orateurs n’ayant pas compris à qui ils s’adressaient en essayant de nous faire croire qu’il réinventaient le monde. Bien sûr, ils ont vite été remis à leur place par certains membres de la communauté.

4. je n’ai pas tout compris ou j’essayais de récupérer des 20 heures de voyage et des 9 heures de décalage horaire.

Du côté de la communauté, ca a permis de mettre des sujets sur la table, comme la scission qui s’opère entre les communautés PHP et les communautés projet comme Joomla ou Drupal par exemple, le tout piloté sur les 3 jours par Cal EVANS.

Ajoutez à cela, une ou deux sorties avec la communauté et vous aurez la recettes de trois journées riches en échange et permettant de faire avancer le schmilblick.

Pour finir, aujourd’hui, j’ai pu profiter de la journée pour me balader dans Seattle. mais bien sûr, les trois journées de beau temps passées enfermées dans des salles de conférence ont été suivies par une journée bien grise avec même quelques gouttes de pluie. J’ai quand même fait mon petit tour en haut de la space needle et fait quelques emplettes pour moi et mes amis :

seattle

seattle2

space_needle

Maintenant, je suis de retour à l’hôtel où j’attends mon taxi pour mon retour vers Paris qui s’annonce comme un nouveau périple de taille : 5 heures d’avion jusqu’à New-York suivies de 10 heures de transit à JFK, suivies de nouveau de 7 heures d’avion. En gros, je pars d’ici vendredi à 21h, j’arrive à Paris Dimanche à 6 heures…que du bonheur.
Allez tant qu’à faire, autant cumuler, il reste quelques pierres par terre, faites vous plaisir, mais ne visez pas la tête :-)

Note : voici mon compte-rendu de la même conférence mais en 2006…lisez le, ca montre bien l’évolution qu’il y a eu en 3 ans.



Balade de l’elephpant, la suite…

    02:53 4 12 2009

IMG_0273

Aujourd’hui, l’elephpant a dû signer un NDA (Non Discolure Agreement) pour pouvoir suivre les conférences sur les grandes nouveautés que Microsoft nous réserve pour les mois à venir.

IMG_0275

Avant de partir, l’elephant a tenu à laisser une petite trace de son passage dans les locaux de Microsoft, quitte à prendre le risque de se faire arrêter pour dégradation. J’ai bien essayé de l’arrêter mais rien à faire…



La balade de l’elephpant chez Microsoft

    23:14 2 12 2009

L’elephpant est actuellement en vadrouille à Redmond, au siège de Microsoft. Il assiste à la Web Developer Conference.

elephpant5

Il est assidu et écoute les conférences avec intérêt même si parfois il a du mal à comprendre ce que les gens disent avec leur accent bizarre.

elephpant1

Après une pleine journée de conférence, l’elephpant est allé se détendre en visitant le MS Visitor Center.

elephpant3

Il est ensuite allé au MS Employee store, mais rien était à sa taille. De toute façon, l’elephpant s’en fiche, il ne porte pas de vêtements marqués MS!

elephpant2

Comme l’elephpant s’ennuyait un peu pendant que les autres achetaient tout et n’importe quoi, il en a profité pour hacker l’écran de bienvenue du MS Store et y incruster subtilement le mot PHP ;-)



Wincache, le cache d’opcode de Microsoft pour PHP

    23:11 1 12 2009

Je suis actuellement au Web Developper Summit organisé par et chez Microsoft à Redmond. Nous avons eu ce matin la présentation de Wincache, un cache d’opcode spécifique à Windows développé par Microsoft.

Sur le papier, cette extension permet de faire du cache d’opcode et du cache de fichier. L’extension est en version 1.0 depuis peu et disponible sur le site de Microsoft ou sur PECL.

Dans les faits, difficile de vérifier, l’extension n’existe qu’en VC9 en non thread-safe. Autrement dit, cette extension est prête pour IIS mais pas pour Apache. Donc, impossible de la tester.

Le démo semblait toutefois assez intéressante, l’extension est livrée avec une interface permettant de visualiser et gérer les fichiers en cache.

J’ai discuté avec le chef de projet de chez MS, l’extension peut fonctionner avec Apache mais ils ne l’ont pas testé jusqu’ici. Reste donc à la compiler en VC6 et éventuellement d’apapter le code à du Thread-Safe.

Qui s’y met?



PHP 5.3 sous Windows, plus de nouveautés qu’on le croit!

    17:49 4 11 2009

J’ai dernièrement eu l’occasion de rencontrer Hank JANSSEN de Microsoft qui a participé, avec Pierre JOYE à la publication de PHP 5.3 sous Windows. On ne s’en rend pas compte car peu de communication a été faite autour mais PHP 5.3 en environnement Windows est un véritable reconstruction du projet. Un travail important de mise à jour et de modification a été accompli et est toujours en cours.

 
La branche PHP 5.3 a introduit un nombre important de nouvelles fonctionnalités. La plupart d’entre nous les connaissent maintenant et si ce n’est toujours pas le cas, vous pouvez les consulter sur le site http://php.net/releases/5_3_0.php.

 
Ce que l’on sait moins, c’est que que cette version a été l’occasion pour les développeurs travaillant sur la version Windows de refondre complétement le projet, reconstruire une plateforme de compilation industrialisée et facile à reproduire et surtout, faire de la version Windows une véritable distribution optimisée pour cet environnement et non plus un simple portage de la version Linux.

 
Commençons par regarder le travail effectué sur le code de PHP en lui-même et ses dépendances. Les distributions de PHP pour Windows jusqu’à PHP 5.2 étaient basées sur un socle monté dans les années 90 et ayant très peu évoluée depuis. On y retrouvait notamment :

  • des librairies n’ayant pas été mise à jour et recompilées depuis très longtemps, les plus vieux binaires identités datant de plus de 12 ans,
  • des binaires dont le code source était tout simplement perdu et donc impossible à recompiler,
  • un code ayant peu profité des mises à jour de sécurité dans les 10 dernières années,
  • l’utilisation de librairies non prévues pour Windows et fonctionnant grâce à de l’émulation ou encore certaines reproduisant des fonctionnalités déjà présentes dans Windows sans en tirer partie,
  • un code optimisé pour Windows 98!

Je ne vais rentrer dans les détails, mais tout cela a été repris, mis à jour, redéveloppé afin de le rendre plus efficace et profiter des particularités de Windows. Un long travail de plusieurs mois dont le résultat est une version optimisée pour cette plateforme, qui peut maintenant passer le PHP test suite (ce qui n’était plus le cas depuis un moment) et être considéré comme une véritable branche de PHP.

Côté plateforme de compilation, le travail effectué a été tout aussi important. La plateforme existante a tout simplement été complétement désassemblée pour être reconstruite à partir de zéro.

Autrefois basée sur un portage de la compilation Linux avec des processus adaptés pour aboutir à quelque chose qui fonctionne, la nouvelle plateforme profite elle d’une véritable industrialisation, facile à reproduire et permettant à chacun de faire des ‘build’ spécifiques à un environnement Windows donné. Les outils utilisés ont tous été actualisés et permettent de profiter de nombreuses optimisation qui n’étaient pas possibles auparavant offrant ainsi de meilleures performances à PHP.

Notons que la compilation est maintenant possible en VC9. Ok, cela ne nous sera pas d’une grande utilité tant que les binaires d’Apache ne seront pas construits également avec ce compilateur, mais il semblerait que ce soit en cours de réalisation.

Seul point noir, la nouvelle plateforme ne compile pas encore les extensions PECL. Mais le travail sur cette partie est en cours et j’espère bientôt voir réapparaître le pecl4win ou un site équivalent.

Enfin, notez qu’un site dédié à Windows existe maintenant dans les « php.net sites » :

http://windows.php.net

Pour conclure PHP 5.3 dispose maintenant d’une véritable version pour Windows avec de bien meilleures performances et des possibilités d’utilisation plus vastes. Bien sûr, je ne m’aventurerais pas à la comparer à la version Linux (je crois que je viens de lancer un troll), que ce soit en terme de qualité ou de performances, mais cette évolution reste quelque chose de très positif. L’ouverture vers toutes les plateformes est un plus pour PHP et ne peut que lui être profitable.

Note : merci à Hank pour les slides qu’il m’a fait parvenir et qui m’ont permis d’écrire ce petite article.



Livre Blanc Industrialisation PHP

    11:33 1 10 2009

livre_blanc_industrialisation_php

 

Alter Way vient de publier le premier livre blanc en français sur l’industrialisation PHP.

Ecrit par deux membres importants de la communauté Française de PHP (Damien SEGUY et Jean-Marc FONTAINE), ce livre blanc dresse un état de l’art des outils et méthodes qui permettent aujourd’hui d’industrialiser ses développements PHP.

 

 
Le plan détaillé :

Introduction
2 Maîtriser le cycle de vie d’un projet PHP
3 Pratiques actuelles
3.1 Faire faire un audit par un expert
3.2 Formation des équipes
3.3 Employer une convention de programmation
3.4 Utiliser un dépôt de code
3.5 Utiliser un framework
3.6 Adopter un IDE de développement
4 Outils et méthodes avancées
4.1 Tests d’application Web
4.2 Intégration continue
4.3 Déploiement automatique
4.4 Analyse statique
4.5 Outils de conception
4.6 Méthodes de programmation
4.7 Maîtrise de la qualité du code
4.8 Implication des utilisateurs
5 Une nouvelle frontière
5.1 PHP n’a pas encore exprimé son identité
5.2 PHP n’exploite pas encore ses capacités de collaboration
5.3 Des idées à explorer
5.4 La communauté est un atout majeur
5.5 Les développeurs vont gagner en discipline
6 Bibliographie

Pour consulter ce livre blanc, suivez ce lien

Pour rappel, Alter Way fait partie des intégrateurs Open Source de référence en France et regroupe notamment les entités Anaska et Nexen Services, spécialistes reconnus du PHP.



L’agenda du forum PHP 2009 est en ligne !

    10:51 30 09 2009

Comme tous les ans, l’AFUP réunira les 12 et 13 Novembre quelques grands experts internationaux du monde PHP, qui viendront échanger autour des problématiques phares du langage open source. L’occasion de faire le point sur les évolutions fonctionnelle et technique, communautaire et entreprise de PHP.

Cette 9ème édition sera axée sur le couple PHP/MySQL, avec 8 conférences dédiées. LEMUG.fr, l’association francophone des utilisateurs de MySQL et partenaire de l’événement animera 3 conférences.

Le Forum PHP accueillera en exclusivité et pour la première fois en France, Michael « Monty » Widenius, le créateur de MySQL. Suite au rachat de MySQL AB dont il était le co-fondateur, Monty a créé l’Open Database Alliance, un consortium et un lieu d’échanges pour tous les acteurs de l’écosystème de la base de données. Par ailleurs il fonde Monty Program ab, et poursuit le développement de MariaDB. A ce titre Monty présentera une conférence intitulée : « MariaDB the future of MySQL ».

Le PHP se décline au féminin avec la participation de : Zoe Slattery, PHP Women. Zoe a œuvré pour le compte d’IBM pendant 20 ans. En 2007, elle s’implique dans la promotion de PHP et développe des phases de tests. Anna Filina, PHP Québec, animera une conférence dédiée aux décideurs sur l’analyse des comportements des développeurs.

Reconnu mondialement comme une alternative de choix aux langages de programmation .Net ou J2EE, PHP est aujourd’hui une technologie mature qui entre dans une phase d’industrialisation. Largement adopté dans le monde de l’entreprise, PHP est un élément clé des infrastructures Web.

L’édition 2009 sera l’opportunité d’aborder l’industrialisation, la professionnalisation et la maturation du langage PHP avec une formule qui fait son succès chaque année : des conférences animées par les meilleurs experts internationaux des retours d’expérience issus des grands comptes des ateliers pratiques.

Comme tous les ans, je serais présent à cette événement sur le stand Anaska (sponsor Gold), n’hésitez donc pas à passer me faire un petit coucou.

Plus d’infos : AFUP.org



Utilisation de memcached sous Windows avec WampServer

    17:00 8 09 2009

J’entends déjà : « Pourquoi utiliser memcached sous windows? C’est pas fait pour la prod. Windows! ».

Ok, ok, mais dites moi? Comment je vais faire pour développer mon appli qui utilise memcached avec mon WampServer préféré si je ne peux pas la tester?

Avant de rentrer dans le détail, voyons un peu ce qu’est memcached.

Memcached est un serveur de mémoire partagé développé par Danga Interactive permettant de mettre des objets de toute sorte en cache.

Pour simplifier, à partir d’un script PHP, vous allez pouvoir mettre des variables en mémoire et donc rendre ces variables persistantes et accessibles à tous vos autres scripts PHP. Vous pouvez bien sûr déjà faire cela avec d’autres extensions telle que APC qui vous offre une solution de mémoire partagée. Sauf qu’avec APC, votre mémoire partagée ne sera accessible que depuis votre serveur local.
Memcached sera accessible à toutes les machines de votre environnement de production et leur permettra ainsi de partager la même mémoire et donc le même cache.

Toujours pas convaincu de l’intérêt ou ca reste pas très clair?

Et bien prenons un exemple.

Vous avez développé un site international de vente en ligne de Bandanas. Vous avez une centaine de références. Le site marche pas mal, vous êtes seul sur votre marché (qui penserait à vendre des bandanas sur internet?), quelques centaines de milliers de visiteurs par jour, tout va bien. Pour gérer la charge, vous avez une infrastructure avec deux serveurs en front et un serveur de bases de données.

C’est alors que Madonna décide de relancer la mode des bandanas en en portant un dans son dernier clip. Britney et Rihanna (ca doit s’écrire comme ca) suivent, la mode prend, tout le monde veut son bandana pour se l’attacher autour du bras ou de la jambe (la classe hein…rigolez pas, ca pourrait arriver)!

Le trafic de votre site explose, votre module permettant d’ajouter des commentaires sur les articles est pris d’assaut, pour gérer la charge, vous ajoutez 3 serveurs supplémentaires.
Ca permet au site de souffler un peu mais vous vous rendez rapidement compte que cela ne suffit pas!

Vous faites donc du profiling sur votre code pour optimiser les performances de votre site et vous rendez compte que c’est la base de données qui pose problème. Trop de connexions, requêtes trop lentes, etc…mais vous ne pouvez pas vous en passer, les pages du site évoluent rapidement avec les commentaires, l’affichage du stock disponible, etc… et vous vous devez d’avoir des pages à jour.
Vous faites le calcul, 10 000 000 de pages du catalogue vues par heure, soit 100 000 pour chaque produit (100 produits) et au moins autant de requêtes sur la base.

Et c’est là qu’intervient memcached. Grâce à memcached, vous allez pouvoir mettre les informations sur les produits en cache dans votre mémoire partagée pour une durée prédéfinie, par exemple, 1 minute et ces informations seront accessibles à vos 5 frontaux sans avoir à faire de requête sur votre base de données.

Ainsi, en une heure et pour un produit donné, vous n’aurez plus que 60 requêtes (1 heure = 60 * 1 minute) pour afficher la page du produit en question et des temps de réponse bien meilleurs (la mémoire est bien plus rapide que la base de données).

Vous serez donc passé de 100 000 requêtes par heure à 60! La contrepartie est que vos pages ne seront mises à jour que toutes les minutes.

Bien sûr, ceci n’est qu’un exemple d’utilisation de memcached, cette solution peut s’avérer utile dans bien d’autres cas (le plus connu étant le partage des fichiers de session sur une architecture avec répartition de charge).

ALORS COMMENT ON L’UTILISE?

La première étape va consister à installer notre serveur memcached. Plusieurs portages de memcached sur Windows existent sur le net, personnellement je vais utiliser une version beta mais plutôt à jour qui fonctionne bien et que vous pourrez trouver sur ce site : http://splinedancer.com/memcached-win32/.

Donc téléchargez les binaires (sous la forme d’un fichier zip), décompressez les et mettez le tout dans un répertoire « c:\memcached » sur votre machine.

Vous devriez maintenant avoir :

c:\memcached\memcached.exe

Vous allez avoir deux façons de le lancer.

Sous la forme d’un service :
c:\memcached\memcached.exe -d install
c:\memcached\memcached.exe -d start

Ou ponctuellement en double cliquant dessus.

Maintenant que notre serveur est lancé, nous allons pouvoir l’attaquer à partir de PHP.

Pour cela nous devons commencer par installer et activer l’extension php_memcache.dll.

Si vous utilisez WampServer avec une version de PHP < 5.3.0, l'extension est fournie par défaut (elle fait partie de PECL). Si vous utilisez PHP 5.3.0 ou supérieur, il vous faudra télécharger l'extension à cette adresse : http://downloads.php.net/pierre/ Activez l'extension via le menu de WampServer ou en modifiant votre fichier php.ini et le tour est joué. Vous allez maintenant pouvoir lire et écrire dans memcached. Sur votre serveur local : < ?php // on se connecte $memcache = new Memcache(); $memcache->connect(‘localhost’, 11211) or die (‘impossible de se connecter’);
//on écrit avec une validité de 10 secondes
$test = ‘du texte’;
$memcache->set(‘test’, $test, False, 10) or die (‘echec sur ecriture’);
//on lit
echo $memcache->get(‘test’);
?>

Maintenant essayez le script ci-dessous sur un autre serveur de votre réseau local en remplaçant XXX.XXX.XXX.XXX par l’adresse IP de votre premier serveur :

< ?php // on se connecte $memcache = new Memcache(); $memcache->connect('XXX.XXX.XXX.XXX', 11211) or die ('impossible de se connecter');
//on lit
echo $memcache->get('test');
?>

Si vous avez exécuté le premier script moins de 10 secondes avant le deuxième, vous verrez le contenu de la variable s’afficher. Au bout de 10 secondes, la variable n’est plus bonne, vous ne pourrez donc plus y accéder.

ET APRES?

Ces exemples sont très pauvres et intentionnellement simplifiés (memcache permet de gérer des pools de serveurs, être utilisé comme gestionnaire de sessions, gérer la compression, etc…) mais quoi qu’il en soit, l’utilisation de memcache est très simple et se limite à une vingtaine de méthodes.

si vous voulez plus d’infos sur l’utilisation de memcache, consultez la doc de PHP



Débugger avec WampServer, Xdebug et PDT

    17:30 28 08 2009

Pour la plupart des projets, l’utilisation de echo et de var_dump() suffit pde our debugger vos scripts. Le mode web est en « page à page », il est donc rare d’avoir des scripts de plusieurs milliers de lignes comme on pourrait en avoir avec les langages compilés. Il peut toutefois parfois être intéressant de faire du debuggage pas à pas et de pouvoir jouer avec les valeurs de vos variables. Je me propose donc de vous montrer comment configurer cela avec WampServer, l’extension XDebug et l’IDE PDT (Php Developpment Tool).
 
 
INSTALLATION DE XDEBUG AVEC WAMPSERVER

Commençons par installer l’extension XDebug. XDebug permet de faire trois choses :

- améliorer la gestion des erreurs de PHP (afficher plus d’informations lors d’erreurs PHP, optimisation de la présentation de var_dump());

- faire du profiling (à utiliser avec kcachegrind ou wincachegrind);

- debugger vos scripts.

Téléchargez l’extension sur le site de XDebug : http://www.xdebug.org

ATTENTION : pensez bien à télécharger la version qui correspond à la branche de PHP que vous utilisez (PHP 5.2 ou PHP5.3) et à prendre la version thread-safe.

A l’heure où j’écris ces lignes,
pour PHP 5.2 : http://www.xdebug.org/files/php_xdebug-2.0.5-5.2.dll
pour PHP 5.3 : http://www.xdebug.org/files/php_xdebug-2.0.5-5.3-vc6.dll

XDebug n’est pas un extension standard de PHP, nous n’allons donc pas la mettre dans le répertoire /ext/ de PHP afin d’éviter d’éventuels conflits avec le menu de WampServer. Je vous propose donc de la déposer dans le même répertoire que l’exécutable de PHP (php.exe), typiquement :

c:\wamp\bin\php\phpx.x.x\

Renommez l’extension en php_xdebug.dll, elle sera plus facile à manipuler.

Nous allons maintenant l’activer. Pour cela nous allons devoir ajouter des commandes dans le fichier php.ini. Dans WampServer, le fichier php.ini utilisé se trouve dans le même répertoire que le binaire d’Apache (apache.exe). Le plus simple pour l’ouvrir est de passer par le menu de WampServer.

WampServer

Allez à la fin du fichier et ajoutez les lignes suivantes :

zend_extension_ts="c:/wamp/bin/php/phpx.x.x/php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req

où x.x.x est votre version de PHP.

En complément, vous pouvez également ajouter

xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "c:/wamp/tmp/"

afin d’activer les fonctions de profiling, ou encore

xdebug.collect_params = On
xdebug.show_local_vars = On

afin d ‘améliorer les informations fournies lors de l’affichage des messages d’erreur.

Une fois ces lignes ajoutées, refermez le fichier php.ini et redémarrez votre service Apache, XDebug devrait maintenant être chargé.

Pour le vérifier, affichez votre phpinfo(). Vous devriez voir apparaître l’information ci-dessous :

phpinfo

Si ce n’est pas le cas, vous avez certainement fait une erreur dans le chemin d’accès au fichier php_xdebug.dll

A ce stade, vous pouvez dors et déjà profiter des fonctions d’amélioration des messages d’erreur de XDebug. Pour cela, essayez d’afficher un message d’erreur et un var_dump().
 
 
CONFIGURATION DE PDT AVEC XDEBUG

Nous allons maintenant configurer PDT pour qu’il utilise les fonctionnalités de debuggeur de XDebug.

Si ce n’est pas déjà fait, commencez par télécharger et installer PDT : http://www.eclipse.org/pdt/

Lors du lancement de PDT, choisissez « c:\wamp\www » comme WorkSpace.

Dans le menu du haut, choisissez window -> preferences.

preferences eclipse

Rentrez maintenant dans le menu « PHP » et cliquez sur « debug ».

debug eclipse

Il existe deux façons de debugger du PHP avec PDT. La première (server) passe par votre serveur web en faisant un appel à localhost. La deuxième (PHP executable) fait un appel direct à l’exécutable de PHP.
Nous allons travailler avec la première solution qui nous offre plus de fonctionnalités et permet, notamment, d’utiliser les méthodes GET et POST.

Par défaut, PDT est livré avec des configurations type pour fonctionner avec XDebug et Zend Debugger. Comme le montre la capture d’écran ci-dessus, choisissez XDebug.

Si votre serveur n’est pas local (localhost), il faudra également modifier la configuration de votre serveur identifié sous PDT par « Default PHP Web Server« .

Voilà, la configuration de base de PDT est terminée, nous allons maintenant pouvoir utiliser PDT pour debugger en mode pas à pas et avec des points d’arrêt.
 
 
UTILISATION DE PDT COMME DEBUGGEUR

Voyons maintenant comment utiliser tout cela. La première chose à faire est de créer un nouveau projet PHP au sein de PDT. Pour cela cliquez sur file -> new -> PHP Project.

Donnez un nom à votre projet (dans la suite de cet article, notre projet s’appellera « test_debug »).
Un répertoire du même nom va être automatiquement créé dans votre répertoire « www ». Vous allez placer ou créer vos scripts PHP dans ce répertoire. Si nécessaire, appuyez sur F5 dans PDT pour que vos scripts apparaissent.

projet eclipse

Ouvrez votre script PHP en double cliquant dessus. Votre code source devrait apparaître dans la fenêtre centrale de PDT.

Nous allons maintenant passer en mode debuggage. Cliquez sur l’icône en forme d’insecte sur la barre d’outil et choisissez Debug As -> PHP Web Page.

eclipse debug as

Cela devrait ouvrir une fenêtre de votre navigateur par défaut (Firefox par exemple) et vous faire basculer sur une perspective de debuggage dans PDT (vous pouvez retrouver les perspectives en haut à droite de PDT).

eclipse perspective debug

Cette perspective est découpée en 5 fenêtres :

- en haut à gauche, une fenêtre de « debug » qui vous donne des informations sur le debuggage en cours et dispose de la barre d’outils de debuggage.

- à droite de cette fenêtre, une autre qui vous donne accès aux variables de votre script et aux points d’arrêt définis.

- en dessous, une fenêtre qui présente votre code, vous montre la ligne courante et permet de définir/annuler des points d’arrêt

- encore en dessous, la fenêtre de console.

- et enfin, à droite, la fenêtre d’Output.

Pour debugger, utilisez la barre d’outils de la fenêtre « debug ».

barre outil debug

Vous pouvez également ajouter des points d’arrêt dans votre code. Pour cela double-cliquez sur la barre grise se trouvant à gauche de votre code (idem pour retirer les points d’arrêt). Des petites boules vont apparaitre pour signaler ces points d’arrêt.

point arret

Au fur et à mesure que vous allez avancer dans le debuggage de votre page, vous pourrez voir le résultat s’afficher directement dans votre navigateur.
 
 
MODIFIER LES VARIABLES EN COURS DE DEBUGGAGE

Il va souvent être utile de modifier le contenu de vos variables en cours de debuggage. Pour cela sélectionnez la variable souhaitée dans la fenêtre d’affichage des variables et modifiez simplement sa valeur.
 
 
TRAVAILLER AVEC GET ET POST

En utilisant PDT avec XDebug, j’ai rapidement eu besoin de jouer avec les tableaux $_GET et $_POST. Malheureusement, je n’ai rien trouvé à ce sujet dans la doc ou dans Google. J’ai toutefois persisté et ai trouvé une astuce pour pouvoir m’en servir.

Commençons par $_GET. Pour le remplir, faites tourner le débuggeur sur votre script et allez jusqu’au bout de votre script. Allez ensuite dans la fenêtre de navigateur ouverte par le debuggeur. Vous devriez vous retrouver avec une barre d’URL de ce type :

url debug

Ajouter les variables que vous souhaitez dans cette url et relancez la page. Retournez maintenant dans PDT, et, magique…la session de debuggage est relancée et les variables sont maintenant disponibles sous $_GET.

Pour $_POST, lancez un debuggage sur le formulaire permettant de faire votre POST et allez au bout du script. Allez dans la fenêtre de navigateur, votre formulaire sera affiché. Remplissez le et validez le. Retournez dans PDT, vous devriez maintenant avoir une session de debuggage sur le script de réception du formulaire.

Il existe certainement d’autres méthodes plus simples pour utiliser nativement $_GET et $_POST avec PDT et XDebug, si vous les connaissez, n’hésitez pas à ajouter votre commentaire à cet article.

De mon côté, j’ai trouvé une autre solution plus efficace et plus pratique pour gérer mes sessions de debuggage, l’utilisation de l’extension XDebug Helper pour Firefox.
 
 
UTILISATION DE L’EXTENSION XDEBUG HELPER POUR FIREFOX

L’extension XDebug Helper pour Firefox va vous permettre de lancer vos sessions de debuggage directement depuis Firefox.

Commencez par installer l’extension que vous pourrez trouver ici :

https://addons.mozilla.org/fr/firefox/addon/3960

Cela va ajouter deux icônes en bas à droite de Firefox.

boutons xdebug

Le premier bouton va vous permettre de lancer des sessions de debuggage. Pour cela, il va falloir configurer PDT pour qu’il accepte le lancement externe de sessions de debuggage. Retourner donc dans la configuration de PDT :

Window -> preferences
puis PHP -> debug -> Installed Debuggers

installed debuggers

Sélectionnez « XDebug » et cliquez sur « configure« .
Dans le menu déroulant « Accept remote session (JIT) » sélectionnez « localhost » (ou « any » si votre serveur est distant).
Vous allez maintenant pouvoir lancer vos sessions directement depuis Firefox.

Pour cela, cliquez sur le bouton de XDebug Helper qui ressemble à une croix dans Firefox (en bas à droite). Celui-ci devrait devenir vert et jaune.

debug actif

Tapez l’URL du script que vous souhaitez debugger(ex : http://localhost/….) et lancez son execution. Retournez dans PDT, votre session de debugage devrait être lancée.
 
 
CONCLUSION

J’espère que ce petit tutoriel vous permettra de développer plus efficacement. A mon avis, tout développeur devrait avoir XDebug installé par défaut. J’ai bien pensé à le fournir directement avec WampServer, mais pour le moment, la structure de WampSever et son mode de fonctionnement « multi-PHP » ne me le permettent pas. Peut être dans une version future…