Je souhaite pouvoir exécuter plusieurs versions PHP sur ma boîte de développement exécutant Ubuntu 12.04. Ce que je veux accomplir, c'est que lorsque j'utilise localhost comme domaine, une valeur par défaut est utilisée (disons PHP 5.3.17). Lorsque j'utilise 547.Localhost comme domaine PHP 5.4.7 est utilisé. J'ai vu des tutoriels pour que cela fonctionne avec FastCGI, mais jusqu'à présent, je n'ai pas pu le faire fonctionner. J'ai regardé ces tutoriels:
Pour autant que je sache, j'ai fait tout ce qui est nécessaire. Le problème est que PHP ne fonctionne tout simplement pas. Quand je vais à http://localhost/somephpfile.php
Cela génère simplement la source du fichier PHP. Le même pour http://547.localhost/somephpfile.php
.
Je vais décomposer les étapes que j'ai prises dans l'espoir que quelqu'un est capable de repérer ce que j'ai manqué.
Sudo apt-get install lamp-server^ phpmyadmin
. Après cela, j'ai eu un serveur de développement de travail exécutant la version du référentiel de PHP./etc/php/phpfarm
, les exécutables sont donc en /etc/php/phpfarm/inst/php-{version}/bin
Sudo a2enmod fastcgi actions suexec && Sudo a2dismod php5
Ensuite, j'ai édité /etc/Apache2/mods-enabled/fastcgi.conf
lire:
<IfModule mod_fastcgi.c>
FastCgiIpcDir /var/lib/Apache2/fastcgi
FastCgiWrapper /usr/lib/Apache2/suexec FastCgiConfig -idle-timeout
110 -killInterval 120 -pass-header HTTP_AUTHORIZATION -autoUpdate
ScriptAlias /php-fcgi/ /var/www/cgi-bin/
</IfModule>
Puis dans /var/www/
J'ai créé un dossier CGI-Bin et dans ce dossier deux fichiers, pour chacune des deux versions PHP comme suit (je ne montre que celui pour 5.3.17 /var/www/php5317.fcgi
):
#!/bin/sh
# you can change the PHP version here.
version="5.3.17"
# php.ini file location, */php-5.2.13/lib equals */php-5.2.13/lib/php.ini.
PHPRC=/etc/php/phpfarm/inst/php-${version}/lib/php.ini
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
# which php-cgi binary to execute
exec /etc/php/phpfarm/inst/php-${version}/bin/php-cgi
La dernière étape consistait à créer des hôtes virtuels. En fin de compte, j'ai trois fichiers dans /etc/Apache2/sites-enabled
: 000-défaut, PHP5.3.17 et PHP5.4.7 avec le contenu suivant:
défaut:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php5317.fcgi
</Directory>
</VirtualHost>
pHP5.3.17:
<VirtualHost *:80>
ServerName 5317.localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php5317.fcgi
</Directory>
</VirtualHost>
pHP5.4.7:
<VirtualHost *:80>
ServerName 547.localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php547.fcgi
</Directory>
</VirtualHost>
Enfin j'ai changé/etc/hôte pour lire
127.0.0.1 localhost
127.0.0.1 547.localhost
127.0.0.1 5317.localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Maintenant, je m'attendrais à ce que les choses travaillent, mais malheureusement, ils ne le font pas. Au lieu de cela qu'un fichier PHP fonctionne via PHP, il génère simplement le fichier brut.
Il doit y avoir quelque chose que j'ai manqué ici, mais j'ai traversé le processus plusieurs fois et je ne peux pas comprendre où cela va mal.
Dans vos virtualhosts, vous avez ajouté un gestionnaire, mais vous n'avez pas réglé le gestionnaire, c'est pourquoi il n'est pas traité. Ajouter:
<FilesMatch "\.php$">
SetHandler php-cgi
</FilesMatch>
avant </Directory>
Dans chaque fichier d'hôtes virtuels.
J'ai aimé cette vue d'ensemble étape par étape par Seedoubleyo et voulait l'essayer moi-même. Ce qui manquait était
Sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
dans le vhost.conf
déposerSudo apt-get install Apache2-suexec-pristine libapache2-mod-fastcgi
FastCgiWrapper /usr/lib/Apache2/suexec
dans le fastcgi.conf
déposerFastCgiIpcDir /var/lib/Apache2/fastcgi
FastCgiIpcDir /var/lib/Apache2/fastcgi: already defined as "/var/lib/Apache2/fastcgi"
Pour toute personne essayant de définir php_admin_value et php_value via .htaccess ou fichiers Vhosts: ce n'est pas possible avec FCGI. Au lieu de cela, vous pouvez utiliser . Les fichiers user.ini Pour définir des configurations PHP.ini spécifiques spécifiques.