Au début Apache utilisait le module PHP pour interpréter les scripts. Pour accélérer les exécution sde scripts, on en est arrivé à faire exécuter via un programme externe au serveur, dit CGI. CGI veut dire Common Gateway Interface, c’était un terme très en vogue au début du web, car on n’avait pas à disposition autant de programme pur web pour faire du rendu, on interfaçait un programme classique avec el web, d’où le nom d’interface.
La version 2 d’Apache utilise un programme CGI pour exécuter des pages php. Donc dans chaque virtual host il va falloir configurer le fait que les fichiers avec extension php soient exécutée avec le programme CGI, le serveur Apache communique avec le programme via le protocol FastCGI avec un module Apache appelé mod_fcgid !
Note : Il existe un protocol alternatif appelé PHP-FPM (FastCGI Process Manager), qui offre des fonctionnalités accrues non abordée dans cette page, spécialement pour des sites à fort traffic.
fichier php <-> mod_fcgid <-> programme exécutant les script php
Le handler fcgid-script est utilisé dans la section <Directory>
AddHandler fcgid-script .php AddHandler fcgid-script .php5 AddHandler fcgid-script .php7.0 AddHandler fcgid-script .php7.1
Le handler fcgid-script fait en sorte que les fichiers PHP soient traité avec le protocol FastCGI. Ensuite ce qui vient à la suite
FCGIWrapper /home/printplusprod/fcgi-bin/php5.fcgi .php FCGIWrapper /home/printplusprod/fcgi-bin/php5.fcgi .php5 FCGIWrapper /home/printplusprod/fcgi-bin/php7.0.fcgi .php7.0 FCGIWrapper /home/printplusprod/fcgi-bin/php7.1.fcgi .php7.1
Donc on fait en deux temps dans la configuration du programme qui va exécuter els fichier PHP, pas très intuitif je le reconnais.
FCGIWrapper (maintenant FCgidWrapper) est la directive qui dit comment les process sont spawnés. La syntaxe de FCGIWrapper est :
FcgidWrapper command [ suffix ] [ virtual ]
Donc prenons la première ligne, la commande est le script shell /home/printplusprod/fcgi-bin/php5.fcgi. Le suffix est ‘.php’, on restreint l’exécution de ce script pour les urls se terminant par ‘.php’. Ce suffix est optionnel. Si vous ne le mettez pas, tout sera exécuté par le programme CGI.
Où se trouve l’exécutable CGI? nous le trouvons dans le fichier php5.fcgi dont voici le contenu exemple :
#!/bin/bash PHPRC=$PWD/../etc/php5 export PHPRC umask 022 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=99999 export PHP_FCGI_MAX_REQUESTS SCRIPT_FILENAME=$PATH_TRANSLATED export SCRIPT_FILENAME exec /usr/bin/php5-cgi
In fine c’est /usr/bin/php5-cgi qui exécute le script PHP.
Un autre exemple
#!/bin/bash PHPRC=$PWD/../etc/php7.0 export PHPRC umask 022 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=99999 export PHP_FCGI_MAX_REQUESTS exec /usr/bin/php-cgi7.0
Là c’est le programme php-cgi7.0 qui est utilisé.
En fait le FCGIWrapper est un script shell qui fait appel à un programme.