Accueil du site > INFORMATIQUE > PHP > Exécuter des scripts PHP5 et PHP4 simultanément sous Windows. Sommes nous (...)

Exécuter des scripts PHP5 et PHP4 simultanément sous Windows. Sommes nous paresseux ?

mardi 9 mai 2006, par Thierry Bothorel

Toutes les versions de cet article : [English ] [français ]

Depuis quelques années, je vois régulièrement des articles à ce sujet. Aujourd’hui encore je viens de lire un sujet sur ce thème, Reminder : You *Can* Run PHP4 And PHP5 On The Same Box At The Same Time. Quel est le problème exactement ?

Qaund on écrit des scripts PHP, on veut savoir si le code tourne correctement sur d’autres versions de l’interpréteur PHP que celui installé sur notre système. La plupart du temps c’est pour tester la compatibilité entre PHP4 et PHP5. Le problème principal vient du fait qu’Apache ne peut peut pas charger simultanément le module pour les deux versions d’Apache. Plusieurs solutions existent :

- Utiliser un module Apache pour éxécuter les fichiers .php et cgi pour les fichiers .php5 (ou vice versa pour php4) : Install PHP5 and PHP4 on the same Apache serverenglish
- Installer deux services Apache : Switching Between Multiple php Versions Using Apache on Windowsenglish
- Variante de la première solution, module Apache pour une version et CGI pour l’autre dans un VirtualHost Plusieurs versions de PHP sur un même serveur
- Exécuter un PHP en module Apache et l’autre par CGI via mod_suphp, comme le suggère l’article de Stuart Herbert (Je n’avais jamais entendu par ler de “mod_suphp” avant)
- Enfin l’article de Stuart Herbert cite Configure Apache to work with PHP4 and PHP5 english qui résume bien ces méthodes ainsi que d’autres “plus avancées”.
- Enfin je viens de trouver une autre méthode qui permettrai d’utiliser PHP4 et 5 simultanément en tant que module, mais c’est un “hack”, il faut dégainer son éditeur hexadécimal pour modifier des “dlls” : installation php4 and php5 to one apacheenglish (c’est une traduction du russe !).

Avons-nous vraiment besoin de faire tourner simultanément PHP4 and PHP5 ? Je ne penses pas. Avoir besoin de tester le code avec les deux versions ne veut pas forcément dire simultanément. Au cours de l’écriture du code, on n’est pas en train de tester chaque fonction dans les deux environnement dès qu’on l’a écrite ! On attend plutôt d’avoir un bout d’application qui tourne déjà correctement. Nous ne sommes pas devenu paresseux au point de ne pas vouloir changer sa configuration et redémarrer Apache ?

Bien que toutes ses solutions soient puissantes et inventives, je les considère trop compliquées pour le résultat, au moins dans un environnement de développement. Et je ne parles pas des inconvénients. Qui veut utiliser des extensions différentes, .php et .php5, pour ensuite avoir tout à modifier quand php5 sera standard ! Et comment tester du code qu’on a récupéré s’il faut changer toutes les extensions ? Ensuite, si on utilise cgi ou un module Apache, les scripts ne s’exécutent pas vraiment dans les même conditions. Les performances sont meilleures en module, vous ne pourrez pas utiliser les connexions persistantes à la base de données. Et si vos scripts utilisent l’authentification http basic, elle ne fonctionnera pas en CGI.

Voici comment j’opère. Je place ces six lignes 6 lignes dans un fichier batch php5to4.bat (faire la même chose pour php4to5.bat) :

et je crée deux fichiers php.ini file, un dans chaque dossier php, et je crée une la variable d’environnement PHPRC pointant vers to H:\httpd\php. Enfin je crée également deux version de httpd.conf, httpd.conf.PHP5 et httpd.conf.PHP4 avec les paramétrages spécifiques à chaque version.

Ensuite je place des raccourcis vers les deux fichiers batchs dans la barre de lancement rapide et hop, cela me prend un clic et une fraction de seconde pour changer la version courante de PHP !

Il y a aussi un autre problème important que je ne vois jamais abordé dans ces articles, les librairies PEAR :

Si vous avez déjà utilisé installé PEAR, vous savez déjà que certains chemins sont codés en dur dans certains fichiers de "la base" PEAR et que certains paramètres de configuration de PEAR pointent vers le dossier de PHP, pas celui de PEAR. Le problème, 99% des installations de PHP sous Windows sont laissées avec leur chemins par défaut, et par défaut PEAR est sous PHP. Si vous changez de version de PHP avec les méthodes mentionnées, vous ne retrouverez pas vos librairies PEAR en dehors de la version de PHP où vous les avez installées.

Vous pouvez recopier votre dossier PEAR d’une version de PHP dans le dossier PEAR des autres versions de PHP à chaque fois que vous faites un changement, mais ce n’est pas pratique car votre fichier PEAR.ini dans windows sera désynchronisé avec les fichiers réellement installés.
La solution est de changer à l’installation de PEAR le dossier par défaut et d’en précider un qui soit à l’extérieur de tout dossier PHP. Si PHP est déjà installé, faite une copie du dossier PEAR, puis taper la commande :

puis supprimez l’ancien dossier.

Par exemple PEAR config-show ressemble à çà chez moi (extrait) :

CONFIGURATION (CHANNEL PEAR.PHP.NET):
=====================================
PEAR executables directory     bin_dir          H:\httpd\php
PEAR documentation directory   doc_dir          H:\httpd\pear\docs
PHP extension directory        ext_dir          H:\httpd\php\ext
PEAR directory                 php_dir          H:\httpd\pear
PEAR Installer cache directory cache_dir        H:\httpd\pear\pear_cache
PEAR data directory            data_dir         H:\httpd\pear\data
PHP CLI/CGI binary             php_bin          H:\httpd\php\php.exe
PEAR test directory            test_dir         H:\httpd\pear\tests
User Configuration File        Filename         H:\httpd\pear\pear.ini
System Configuration File      Filename         H:\httpd\pear\pearsys.ini

Si vous utilisez cette méthode, c’est à dire une seule version de PHP active en même temps et le dossier de la version active est toujours le même dossier, quelle que soit la version de PHP, vous n’aurez qu’une seule version de PEAR à gérer et disponible à partir de n’importe quelle version de PHP.

Répondre à cet article | RétroLiens :0


Répondre à cet article