Lors des phases de beta test de PHP4, une méthode permettant de faire cohabiter PHP3 et PHP4 sur le même serveur, consistait à déployer l'un en module et l'autre en cgi.

Mais depuis PHP3.0.13 et PHP4.0 beta 3, il est possible de faire tourner les deux branches de PHP en module.

Pré-requis

Je concidère que vous diposez d'une version Apache compilée avec le module so (mod_so enabled). Afin de le vérifier, vous pouvez faire :

$ httpd -l
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_so.c
  mod_setenvif.c
Cette commande retourne un certain nombre d'informations relatives aux modules embarqués par Apache. Vérifiez que mod_so.c figure dans la liste. Sinon, vous devez recompiler Apache (voir la doc).

Je concidère également que vous disposez des sources de PHP3 (supérieur ou égale à 3.0.13) et des sources de PHP4 (supérieur ou égale à 4.0 beta 3).

Enfin, que vous disposez d'un OS suffisament récent :

- Linux avec une version récente de binutils (binutils 2.9.1.0.25 ou plus)
- Solaris 2.5 ou plus
- FreeBSD (3.2, 4.0 ou plus)
- ...

Compilation de PHP3

Sans être root (inutile), placez vous dans le repertoire comportant les sources de PHP3, puis faites,

$ cd ~/php-3.0.18
$ make distclean
$ ./configure '--with-apxs=/usr/local/apache/bin/apxs' '--with-mysql' '--enable-versioning' '--enable-track-vars'
$ make
La commande make distclean permet de purger vos sources et de faire disparaitre toutes traces d'une ancienne compilation. Cette étape est fortement recommandée.

Notez l'option de compilation '--enable-versioning'. Libre à vous d'indiquer d'autres options (genre '--with-ftp' '--with-gd' , etc.).

Enfin, la commande make va lancer la compilation.

Si tout c'est bien passé, il vous reste à passer root et faire,

$ make install
PHP3 est installé.

Compilation de PHP4

Idem. Sans être root (inutile), placez vous dans le repertoire comportant les sources de PHP4, puis faites,

$ cd ~/php-4.0.4pl1
$ make distclean
$ ./configure '--with-apxs=/usr/local/apache/bin/apxs' '--with-mysql' '--enable-versioning' '--enable-track-vars'
$ make
Si tout c'est bien passé, il vous reste à passer root et faire,

$ make install
PHP4 est installé.

Paramétrage d'Apache

Editez le fichier httpd.conf d'Apache. Et vérifiez les points suivants,
# Chargement des modules de PHP3 et PHP4
LoadModule php3_module        libexec/libphp3.so
LoadModule php4_module        libexec/libphp4.so

# AddType PHP3
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps

#AddType PHP 4
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Et éventuellement, afin de parser dans l'ordre que vous voulez les fichiers index.php3 et index.php
# DirectoryIndex
<IfModule mod_dir.c>
	DirectoryIndex index.html index.php3 index.php
</IfModule>
Il vous reste alors à relancer Apache.

$apachectl stop
$apachectl start
Tester l'ensemble

Afin de tester si tout fonctionne bien, le plus simple est de faire 2 fichiers faisant un simple phpinfo(). Le premier portant l'extension .php3 et le second l'extension .php.