Serveur-de-ouf
J'ai enfin réinstallé Apache et PHP sur mon serveur. Je l'ai formaté cette semaine (ça fait du bien une fois par an), et j'avais un peu la flemme de tout remettre, mais hier je me suis lancé. Comme à chaque install je cherche à rajouter un-truc-de-oufTM, cette fois j'ai voulu installer PHP4 & PHP5 sur le même Apache.
Des serveurs proposent déjà ça, mais la plupart demandent une extension différente pour utiliser le bon PHP (.php5 par exemple). Ou pire : des tutoriaux expliquent comment faire tourner une version différente sur un autre port !
Je préférais l'idée d'utiliser plutôt un sous-domaine pour indiquer à Apache quelle version utiliser. Country m'a gentiment donné ce lien où tout est très bien expliqué.
J'ai choisi de faire l'inverse et d'installer PHP5 en module (donc par défaut), et PHP4 en CGI.
Pour charger PHP5 en module (vraiment si vous ne le savez pas) :
LoadModule php5_module "C:/Program Files/Apache Group/PHP5/php5apache2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/Program Files/Apache Group/PHP5/"
La dernière ligne est importante car elle indique l'emplacement du fichier de
configuration (qui peut être différent de la 5 à la 4).
Je passerai le chapitre qui explique comment faire un sous-domaine, je l'ai déjà fait sur ce billet. Voici ce qu'il faut faire pour lancer PHP4 en CGI sur un sous-domaine :
<VirtualHost *>
ServerName php4.neovov.com
ServerAlias php4.neovov.net
#DocumentRoot "C:/www/php4"
ScriptAlias /php4-bin/ "C:/Program Files/Apache Group/PHP4/"
SetEnv PHPRC /php4-bin/
Action php4-script /php4-bin/php.exe
AddHandler php4-script .php
ErrorLog logs/error-php4.log
CustomLog logs/access-php4.log common
<Directory "C:/Program Files/Apache Group/PHP4/">
Allow from all
</Directory>
</VirtualHost>
ServerName indique le nom du sous-domaine, ServerAlias un alias au nom principal.
DocumentRoot est ici mis en commentaire, si vous suivez le tutorial de Zend le sous-domaine ne s'applique qu'a un dossier. Si on commente cette ligne le sous-domaine utilisera la valeur précédente de DocumentRoot, autrement dit : tout le serveur (pour mon cas).
ScriptAlias définit un alias de script pour ne pas avoir à retaper l'url d'un dossier plusieurs fois.
SetEnv PHPRC définit ou trouver le fichier de configuration d'Apache, c'est une ligne très importante.
Action définit l'action à effectuer, ici on appel php.exe (php-cgi.exe pour PHP5).
AddHandler sert à créer un déclencheur pour le CGI, ici dès qu'on veut exécuter un .php.
ErrorLog & CustomLog permet de générer des logs spécifiques au CGI, pratique lorsque l'on veut surveiller les erreurs de PHP4 différenciées de celle du 5.
Et la règle <Directory> permet d'autoriser les utilisateurs (nécessaire dans mon cas, je refuse les accès par défaut).
Bon c'était peut-être un peu long, mais ça marche du tonnerre.
Depuis la sortie du ZendFramework j'ai toujours voulu le tester, mais pas vraiment le temps. J'en ai carrément profité pour l'intégrer dans le serveur :
<Directory "C:/Program Files/Apache Group/Zend Framework">
Options Indexes
Allow from all
AddType application/x-httpd-php-source .php
</Directory>
Alias /zendframework "C:/Program Files/Apache Group/Zend Framework/"
Options Indexes permet d'autoriser l'indexation du dossier (qu'il montre les fichiers).
Allow from all autorise les utilisateurs (ça ne sert à rien sinon).
AddType application/x-httpd-php-source .php définit le type mime des .php en indiquant qu'ils doivent être "traités" comme un fichier source.
Un alias et le tour est joué, en utilisant http://localhost/zendframework j'arrive dans le dossier et je peux visualiser tous les fichiers avec une coloration syntaxique en plus :] .
Pour utiliser le framework avec PHP il suffit de spécifier le nom du dossier dans l'include path :
include_path = ".;C:\Program Files\Apache Group\Zend Framework\library"
Ensuite on peut l'utiliser de n'importe où sur le serveur, si c'est pas magnifique ça !?
Bon, le framework n'est pas compatible avec PHP4 (pas étonnant en même temps), donc ça ne sert à rien de renseigner le dossier dans l'include path du fichier de config de PHP4 (d'ou l'intérêt d'avoir 2 fichiers de config aussi).
Puisque je parle de la config de PHP j'en ai profité pour mettre le manuel sur le serveur aussi (en version HTML, très laide) au cas où j'ai une coupure d'Internet (ce qui est fort probable vu que je vais bientôt déménager).
docref_root = "/phpmanual/"
docref_ext = .html
docref_root fait référence à un alias que j'ai défini dans la config d'Apache.
Voila c'est tout ! Ah j'avais oublié : J'en ai également profité pour découper le fichier de config d'Apache. En fait j'avais d'abord installé Apache 2.2.3, mais les développeurs de PHP n'ont pas encore fait de handler pour la 2.2.x, donc je me suis retrouvé comme un ...
Ce qui donne :
Include conf/extra/httpd-vhosts.conf
Des includes à la fin du fichier, par exemple celui ci charge le fichier de configuration des virtualhost. Très pratique, plutôt que d'avoir un fichier de config énorme.
[Edit : Un problème de SQL ? c'est par là la réponse.]
Commentaires
MDR ! Je sais, j'ai très honte.
Mais je suis incompatible avec Linux, a chaque fois que j'ai voulu essayer... Ben ça a pas voulu marcher (si si, même les Live CD).
Alors en attendant j'ai mis Windows 2003, au moins ça marche tout de suite et j'ai pas besoin de recompiler le noyau pour désactiver le son.
Moi c'est apparu avec le .dll :D
Sinon, au lieu de faire un CGI + un module, tu peux faire plein de CGIs avec plein de handlers différents (un executable + une config) (PHP4, PHP5, PHP5 avec certains mods en plus, PHP5 secure, ...)
Bon après c'est super lourd à mettre à jour, et ça fait autant de programmes à lancer en parallèle, mais ça peut être pratique dans certains cas.
Laissez le vôtre !
Les commentaires pour ce billet sont fermés.
J'ai gerbé quand j'ai vu C:/
La honte !