J'ai toujours exécuté PHP en mode ISAPI. Le plus gros inconvénient de cette méthode est sa mauvaise stabilité. Lorsque PHP tombe en panne, le processus Apache meurt également. Plus tard, j'ai vu sur Internet une introduction à propos de PHP fonctionnant en mode FastCGI. Les différents avantages évoqués (stabilité, sécurité, hautes performances) m'ont décidé à l'essayer.
Cependant, les choses étaient loin de se dérouler aussi bien que prévu. J'ai effectué d'innombrables recherches sur Google, mais je n'ai trouvé aucune information sur la façon d'utiliser Apache + FastCGI pour exécuter PHP sous Windows. De nombreuses personnes utilisent IIS + FastCGI pour exécuter PHP. L'un des articles mentionne que Zend recommande également d'exécuter PHP en mode FastCGI ( http://phplens.com/phpeverywhere/fastcgi-php ).
Après plusieurs heures d'exploration, j'ai finalement réussi à implémenter Apache 1.3 + FastCGI pour exécuter PHP.
Préparation:
Visitez d'abord http://www.fastcgi.com/dist/ pour télécharger mod_fastcgi pour Apache. J'utilise mod_fastcgi-2.4.2-AP13.dll. Après le téléchargement, copiez ce fichier dans le répertoire des modules d'Apache.
Téléchargez PHP (j'utilise PHP-5.0.4) et décompressez-le, modifiez le fichier php.ini si nécessaire. Notez que vous n'avez pas besoin de copier de fichiers du répertoire PHP vers le répertoire Windows.
Modifier la configuration :
Modifiez ensuite le fichier httpd.conf et ajoutez les lignes suivantes :
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processus 3
# Remarque : -processes 3 signifie ici démarrer trois processus php-cgi.exe.
# Pour les paramètres détaillés de FastCgiServer, veuillez vous référer à la documentation FastCGI.
AddType application/x-httpd-fastphp5 .php
Application d'action/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# Description : Modifiez les deux mots en gras ci-dessus en fonction de l'emplacement de votre fichier PHP.
Une fois la modification terminée, redémarrez simplement Apache.
FAQ :
D'après mes nombreuses expériences, les problèmes les plus courants sont principalement causés par les chemins. Vérifiez donc d’abord si tous les chemins dans les fichiers php.ini et httpd.conf sont corrects. La seconde est que si PHP a déjà été installé sur le système, alors C:Windowsphp.ini doit être renommé ou supprimé.
Deuxièmement, vérifiez si le répertoire où se trouve le fichier PHP dispose d'autorisations suffisantes (je l'ai défini sur Tout le monde - Contrôle total, de toute façon, vous n'avez pas besoin de prendre en compte autant de restrictions de sécurité sur les machines de développement).
Avantages d'exécuter PHP en mode FastCGI :
Il existe plusieurs avantages majeurs à exécuter PHP en mode FastCGI. La première est que lorsque PHP échoue, il ne fera pas tomber Apache, mais le propre processus de PHP plantera (mais FastCGI redémarrera immédiatement un nouveau processus PHP pour remplacer le processus en panne). Deuxièmement, le mode FastCGI a de meilleures performances lors de l'exécution de PHP que le mode ISAPI (j'ai initialement utilisé ApacheBench pour tester, mais j'ai oublié de sauvegarder les résultats. Si vous êtes intéressé, vous pouvez le tester vous-même).
Enfin, vous pouvez exécuter PHP5 et PHP4 en même temps. En référence au fichier de configuration ci-dessous, deux hôtes virtuels ont été établis, l'un utilisant PHP5 et l'autre utilisant PHP4.
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processus 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Écouter 80
NomVirtualHost *:80
DocumentRoot d:/www
Options Index FollowSymlinks MultiViews
Nom du serveur php5.localhost
AddType application/x-httpd-fastphp5 .php
Application d'action/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions FancyIndexation des dossiers en premier
Options Index FollowSymLinks MultiViews
AllowOverride Aucun
Commande autoriser, refuser
Autoriser tous
Écoute 8080
NomVirtualHost *:8080
DocumentRootd:/www
Options Index FollowSymlinks MultiViews
Nom du serveur php4.localhost
AddType application/x-httpd-fastphp4 .php
Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
Options Index FollowSymLinks MultiViews
AllowOverride Aucun
Commande autoriser, refuser
Autoriser tous
En utilisant la configuration ci-dessus, PHP5 est utilisé lors de l'accès à http://localhost/ et PHP4 est utilisé lors de l'accès à http://localhost:8080/ . Ainsi, tant qu'il est correctement configuré, différents hôtes virtuels peuvent utiliser différentes versions de PHP.
Quelques inconvénients du mode FastCGI :
Après avoir parlé des avantages, parlons des inconvénients. D'après mon utilisation actuelle, le mode FastCGI est plus adapté aux serveurs dans les environnements de production. Mais il ne convient pas aux machines de développement. Parce que lorsque vous utilisez Zend Studio pour déboguer le programme, FastCGI pensera que le processus PHP a expiré et renverra une erreur 500 sur la page. C'était tellement ennuyeux que je suis revenu en mode ISAPI sur ma machine de développement.
Enfin, il existe une faille de sécurité potentielle en mode FastCGI sous Windows. Comme je n'ai pas trouvé de moyen d'implémenter SuEXEC dans un environnement Windows, le processus PHP s'exécute toujours avec les privilèges les plus élevés, ce qui n'est évidemment pas une bonne nouvelle du point de vue de la sécurité.
Conclusion:
L’application de FastCGI dans cet article en est encore à un stade très préliminaire, et n’est utilisée que comme point de départ, en espérant que des solutions plus matures émergeront.