1 / 22

Les extensions PHP, SAPI et leur modularisation Par Jean-Michel Dault Jeudi le 20 mars 2003

Les extensions PHP, SAPI et leur modularisation Par Jean-Michel Dault Jeudi le 20 mars 2003. Sommaire. Motivation Sous le capot de PHP Structure interne Composantes: Noyau SAPI Extensions PHP Statique ou Modulaire? Compiler, installer et tester les extensions Créer une extension.

Download Presentation

Les extensions PHP, SAPI et leur modularisation Par Jean-Michel Dault Jeudi le 20 mars 2003

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Les extensions PHP, SAPI et leur modularisation Par Jean-Michel Dault Jeudi le 20 mars 2003

  2. Sommaire • Motivation • Sous le capot de PHP • Structure interne • Composantes: • Noyau • SAPI • Extensions • PHP Statique ou Modulaire? • Compiler, installer et tester les extensions • Créer une extension

  3. Motivation • Expérience de plusieurs ISPs • Problèmes d'installation: • SquirrelMail requiert IMAP • Horde , IMP et Turba requièrent LDAP • Thumbnailer requiert GD • PHP-nuke requiert MySQL • Mises à jour difficiles (ie MySQL 3 -> 4) • Difficile de gérer de multiples serveurs

  4. Solution: la modularisation • PHP3 a vu naître l'apparition du Zend Engine, qui a permis de séparer le « parsing » du code PHP de ses fonctions, ce qui a permis un début de modularisation. • PHP4 complète ce travail, supporte un plus grand nombre de serveurs web grâce au SAPI, et permet de compiler des modules à l'extérieur du noyau de PHP (un peu comme APXS le fait pour Apache) • Tentons maintenant de disséquer cette bête ;-)

  5. Structure interne de PHP

  6. Organisation des sources • Zend: Zend Engine (Interpréteur/Compilateur) • TSRM: Thread-Safe ressource Manager • main: coeur du langage • sapi: interface pour le serveur web • pear: PHP Extension and Application Registry • tests: scripts qui vérifient les fonctionnalités et servent à la correction de bugs

  7. Les SAPI • Apache: pour Apache 1.3 • Apache2filter (vieux) / Apache2handler (nouv) • CGI: n'importe quel serveur web (+Suexec) • CLI: Ligne de commande, remplace Perl pour les scripts, création de GUI avec php-GTK • ISAPI: pour Microsoft IIS • Embed: intégrez dans un programme C • AOL/netscape/roxen/servlet/thttpd/tux/...

  8. Les Extensions • Bases de données: MySQL, PostgreSQL, Oracle, ODBC, cdb/db/gdbm, Dbase, FilePro, FrontBase, Informix, InterBase, Ingres2, MSSQL, SyBase... • Clients: LDAP, NIS, SMTP/IMAP, SSL, IRC... • Graphiques: GD, Exif, PDF • Internationalisation: mbstring, gettext, pspell... • E-Commerce: Verisign, TrustCommerce, SSL • Streams (FTP/HTTP, compression, stdin...) • XML/XSLT • PEAR

  9. Extensions externes (PEAR) • Il y avait trop de modules! • Les nouveaux sont maintenant sur PEAR • PECL (pickle): PHP Extension Code Library • PEAR fournit aussi des classes (includes) • PFC: PHP Foundation Classes • Paquetages GTK, pour créer des interfaces graphiques • http://pear.php.net

  10. Inconvénients: Un changement dans un module ou une des librairies requises entraîne automatiquement une recompilation Taille du binaire plus grande, requiert plus de mémoire PHP Statique • Avantages: • Pas besoin de charger le module, il est disponible immédiatement • Pas de fichiers supplémentaires sur le disque • Meilleure performance si bien configuré

  11. Inconvénients: Plus lent à démarrer (important pour CGI) Plus de fichiers à manipuler (sauf RPM) PHP Dynamique • Avantages: • Pas besoin de recompiler • Installation et désinstallation de modules à volonté • Plus léger • Mises à jour et réplication plus faciles • Idéal pour développeurs ou hébergeurs

  12. Pousser plus loin • PHP pèse 3 megs • 3 megs pour Apache, 3 megs pour Apache2, 3 megs pour CGI, 3 megs pour CLI, etc. • Perte d'espace, de performance et de mémoire, puisque chaque requête, même les images, prend 3 megs de mémoire sur le serveur. • Idée poussée par Mandrake: isoler le noyau de PHP (libphp_common), séparer les extensions, (php-imap, php-ldap), et séparer les SAPI. • Chaque SAPI prend maintenant ~20K!

  13. Compilation • Schéma classique: • ./configure;make;make install • Par défaut, compile CGI • Il faut spécifier le SAPI, par exemple • ./configure –with-apxs (ou –with-apxs2) • Spécifier –prefix, sinon utilise /usr/local • Par défaut, seuls quelques extensions sont configurées. • Important de faire ./configure –help !!!

  14. Compilation (suite) • Pour désactiver une extension: • --disable-<ext> OU • --without-<ext> • Pour activer une extension: • --enable-<ext> OU • --with-<ext> • Pour compiler une extension en module externe: • --with-<ext>=shared • --with réfère à des librairies ou fichiers externes

  15. Librairies et entêtes externes • Pour compiler la plupart des extensions, il faut des librairies et entêtes externes • Par exemple, pour générer du flash, il faut la librairie Ming. • Dans le cas où ces librairies ne sont pas installées dans /usr, il faut spécifier le répertoire. • Exemple: --with-ming=shared,/usr/local • Lire la documentation PHP, à la section traitant de l'extension pour savoir où aller chercher la librairie, les URLs sont généralement indiqués.

  16. Installation • Faire simplement un « make install » en root, OU • make INSTALL_ROOT=/tmp/php install (ceci est très pratique, on peut faire par la suite un tar.gz du répertoire et l'installer sur plusieurs machines) • On peut aussi faire un « make install-cli » pour installer l'exécutable php • Attention, il faut utiliser aussi le install root si on l'a utilisé pour le make install • Avant de faire make install-cli, renommer /usr/local/bin/php en php-cgi pour avoir les deux.

  17. Compilation de modules externes • On peut compiler (ou recompiler) des modules sans avoir à recompiler PHP au complet: • cd ext/ldap • phpize • ./configure • make • make install • L'extension est automatiquement installée, il n'y a plus qu'à dire à PHP de la prendre en compte.

  18. Façons de gérer les modules • Utiliser des rpms ou .deb • Ajouter « extension=module.so » dans le php.ini • Utiliser la fonction dl(): rien à modifier (simplement inclure le module dans le code php), mais plus lent puisque les scripts doivent charger l'extension à chaque exécution • Créer des fichiers ini séparés (config-file-dir): nouvelle fonctionnalité de PHP 4.3.x, utilisée par Mandrake. Ex: /etc/php/34_mysql.ini

  19. Pour les purs et durs ;-) cd /etc/xml gcc -fPIC -shared -O2 -fomit-frame-pointer -pipe \ -march=i586 -mcpu=pentiumpro \ -I. `php-config --includes` \ -I/usr/include/xml \ -DCOMPILE_DL_XML -DHAVE_LIBEXPAT \ -DHAVE_DLFCN_H \ xml.c -o xml.so -lexpat -lc Dans ce cas, une compilation manuelle nous permet d'utiliser des optimisations Pentium, et d'utiliser la librairie expat du système au lieu de celle incluse dans PHP (qui cause des problèmes avec mod_perl et Axkit).

  20. Création d'extensions • Création du squelette: • cd ext; ext_skel –extname=my_module • cd ..;./buildconf;./configure;make • ./sapi/cli/php -f ext/my_module/my_module.php • Congratulations! You have successfully modified ext/my_module/config.m4. Module my_module is now compiled into PHP. • Lecture de la documentation: • http://www.zend.com/apidoc/

  21. Tester PHP • export TEST_PHP_EXECUTABLE="./sapi/cli/php" • ./sapi/cli/php run-tests.php • Cette procédure effectue plus de 400 tests • Si un test échoue, vous pouvez regarder le fichier .phpt pour savoir où ça plante • En plus des tests normaux, chaque bug vérifié contient son ficher bug#####.phpt, il est donc aisé de vérifier quels bugs ont été corrigés. • Les masos prendront les .phpt du CVS pour être sûrs d'avoir les bug reports les plus à jour ;-)

  22. Merci de votre participation! Questions?

More Related