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

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: 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

Page 2: 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

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

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

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

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 ;-)

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

Structure interne de PHP

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

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

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

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/...

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

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

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

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

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

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é

● 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

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

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

● Inconvénients:– Plus lent à

démarrer (important pour CGI)

– Plus de fichiers à manipuler (sauf RPM)

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

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!

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

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 !!!

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

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

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

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.

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

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.

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

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.

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

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

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

Pour les purs et durs ;-)cd /etc/xmlgcc -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).

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

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/

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

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 ;-)

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

Questions?

Merci de votre participation!