Introduction
There is no programming language, no matter how structured, that will prevent programmers from making bad programs.
– Larry Flon
Une Extension PHP est un module chargé par le moteur de PHP lors de son lancement et capable d’influer sur son comportement, généralement en ajoutant des fonctions ou classes qui sont alors considérées comme internes à PHP.
Pourquoi développer une extension PHP ?
Plusieurs raisons peuvent justifier le choix d’écrire une extension PHP. Pour n’en citer que quelques-unes :
- une extension est écrite en C, qui est un langage compilé de bas niveau, ce qui permet souvent un gain en performances considérable par rapport à une portion de code équivalente écrite en PHP.
- Une extension C peut être utilisée pour encapsuler une bibliothèque système, l’exposant ainsi à l’espace utilisateur PHP.
- De par son intégration plus proche du cœur de PHP, une extension a des possibilités fonctionnelles qui ne sont pas offertes aux scripts utilisateurs.
- Ce point n’est que rarement exploité et assez éloigné de la philosophie ouverte de PHP, mais diffuser la version compilée d’une extension sans son code source permet de mettre en place un composant boite-noire, exposant des fonctionnalités aux utilisateurs sans pour autant leur révéler comment celles-ci sont implémentées.
Vous l’aurez compris : à partir du moment où vous développez une extension PHP, un large éventail de possibilités s’offrent à vous – jetez un coup d’œil à la liste d’extensions diffusées sur PECL pour vous en rendre compte par vous-même !
Pour donner quelques exemples, correspondant respectivement à chacune de ces raisons :
- le moteur de templating Twig propose une extension, plus rapide que sa version PHP.
- L’extension
ssh2permet à PHP d’utiliser les fonctionnalités de la bibliothèquelibssh2, de la même manière que l’extensioncurlencapsule la bibliothèquelibcurl. - Une extension peut déclarer des variables super-globales, comme le fait
ext/sessionpour$_SESSION. Une extension PHP peut exposer à l’espace utilisateur le mécanisme de threading intégré à PHP, comme le faitpthread. Une extension PHP, commeAOPpeut aussi permettre de se brancher autour de l’exécution de n’importe quelle fonction. - L’extension
ioncubepermet de lire à la volée des fichiers PHP encodés avant leur diffusion. Un autre exemple serait l’extension PHP que newrelic fournit, qui permet d’envoyer à son service de monitoring et d’analyse des données internes sur le fonctionnement de votre application. Ces extensions sont toutes deux propriétaires et leurs sources ne sont pas diffusées.
Bref, les possibilités sont pour ainsi dire infinies !
Pourquoi ne pas développer une extension PHP ?
Pour autant, développer une extension PHP n’est pas la solution à tous vos problèmes et trois points majeurs sont à prendre en compte avant de vous lancer.
Le premier est qu’une extension s’écrit en C. Ce langage n’est pas, en soi, plus difficile qu’un autre, mais si vous travaillez dans un contexte plutôt orienté Web, il est fort probable que vos collègues (ou vous-même !) ne soient pas à l’aise avec ce langage. Cela rendra le développement et la maintenance de votre extension plus difficile : qui s’en chargera si vous êtes en vacances1 ?
Le second est qu’une extension s’intègre plus profondément au moteur de PHP qu’un script utilisateur. En conséquence, un bug au sein d’une extension peut avoir des conséquences nettement plus dramatiques : au lieu d’un avertissement ou, au pire, d’une Fatal Error mettant fin à l’exécution d’une page, vous pouvez causer un plantage du serveur Web !
Le troisième est un peu lié au second : à partir du moment où l’on travaille au plus proche de l’interne du moteur de PHP, on ressent beaucoup plus les modifications apportées à celui-ci (ce qui est logique). Les développeurs de PHP s’assurent que les améliorations apportées à celui-ci aient le moins d’impact possible au niveau de l’exécution de scripts PHP, mais on ne peut pas toujours en dire autant lorsqu’il s’agit des extensions. Autrement dit, développer une extension proche du moteur de PHP – ce qui n’est pas le cas de toute, heureusement – qui fonctionne sous PHP 5.3 et 5.4 et 5.5 voire même 5.6 n’est pas une tâche facile sans une parfaite connaissance de ces changements, qui ne sont pas toujours réellement perceptibles de l’extérieur.
Bien sûr, il vous revient de faire le nécessaire pour limiter les risques : comme pour n’importe quel composant, partagez le savoir autour de vous ; et mettez en place des tests automatisés !
Enfin, installer une extension PHP demande généralement l’intervention d’un administrateur. Le déploiement d’une mise à jour de celle-ci est donc souvent moins évident que lorsqu’il s’agit de livrer du code PHP.
À qui s’adresse ce livre ?
Ce livre s’adresse à des développeurs PHP expérimentés et suppose que vous connaissez suffisamment bien PHP pour savoir ce qu’il permet, ce qu’il ne permet pas, et vouloir aller plus loin.
De bonnes notions de C, même un peu rouillées et/ou remontant par exemple à vos études, seraient un plus non négligeable : elles vous permettraient de comprendre plus facilement une partie des constructions utilisées. Toutefois, si vous n’avez pas peur d’apprendre sur le tas et que vous êtes prêt à fouiller par vous-même, les points de C utilisés au cours de ce livre devraient rester abordables même pour un débutant.
Les exemples présentés ont tous été testés sur PHP 5.42. La majeure partie d’entre eux devraient toutefois fonctionner sur des versions inférieures (PHP 5.3, voire même l’obsolète version 5.2), mais j’aborderai parfois – en indiquant lorsque ce sera le cas – des concepts qui ne peuvent être exploités qu’à partir de PHP 5.5.
Remerciements
Un immense merci à Julien Pauli (@julienPauli), Release Manager de PHP 5.5 et 5.6, pour les nombreux retours techniques qu’il m’a adressés en relisant ce livre, qui se sont traduits par autant de corrections ou d’ajouts de précisions.
Les sections en rapport avec le travail sous Windows doivent beaucoup à Pierre Joye (@pierrejoye), qui contribue à PHP depuis de nombreuses années, à qui je dois également un grand merci !
Je tiens aussi à remercier Agnès Haasser (@tut_tuuut) qui a accepté de relire plusieurs chapitres de ce livre, corrigeant de nombreuses fautes de français ici et là, rendant ainsi la lecture plus agréable pour tous.
Enfin, merci aussi à vous qui prenez le temps de me signaler les inévitables fautes, erreurs, ou même bugs que vous constatez : la qualité de ce livre en est d’autant améliorée. Continuez ! Je suis aussi bien évidemment ouvert aux suggestions et recommandations que vous avez à l’esprit. ;-)
À propos de l’auteur
Je m’appelle Pascal MARTIN.
J’ai découvert PHP aux environs de l’an 2000 et je travaille dans le développement Web et PHP depuis plus de 9 ans. Je publie occasionnellement des articles en rapport avec le développement Web et principalement PHP, sur mon blog.
Ayant de plus en plus tendance, depuis quelques années, à chercher comment PHP fonctionne en lisant des portions de son code source, c’est presque naturellement que j’en suis venu à me pencher sur le développement d’extensions, renouant ainsi avec le C, langage qui m’a réellement fait découvrir la programmation il y a bientôt 15 ans.
Vous pouvez me suivre sur @pascal_martin et parfois me croiser sur Google+ ou sur StackOverflow, ou me joindre par e-mail : contact@pascal-martin.fr.
Je suis bien sûr preneur de tout retour, de toute suggestion et de tout rapport d’erreur que vous voudrez me faire ;-)
Je vous souhaite une excellente lecture et bon courage pour vos premiers pas dans le développement d’extensions PHP !
– Pascal MARTIN
- Et si vous passez sous un bus ?↩
- Pendant le plus gros du temps passé à de l’écriture de ce livre, PHP 5.4 est la version stable de PHP, PHP 5.3 atteignant sa fin de vie et PHP 5.5 ayant été diffusé il y a peu de temps.↩