Je veux pouvoir exécuter plusieurs versions de 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, un défaut est utilisé (disons php 5.3.17). Lorsque j'utilise 547.localhost comme domaine php 5.4.7 est utilisé. J'ai vu quelques tutoriels pour faire fonctionner cela en utilisant fastcgi mais jusqu'à présent, je n'ai pas pu le faire fonctionner. J'ai regardé ces tutoriels:
- http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
- http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/
Pour autant que je puisse voir, j'ai fait tout ce qui était nécessaire. Le problème est que php ne fonctionne tout simplement pas. Quand j'y vais, http://localhost/somephpfile.php
il suffit de sortir la source du fichier php. Pareil pour http://547.localhost/somephpfile.php
.
Je décompose les étapes que j'ai franchies dans l'espoir que quelqu'un puisse repérer ce que j'ai manqué.
- J'ai d'abord installé une pile de lampes par défaut à l'aide de
sudo apt-get install lamp-server^ phpmyadmin
. Après cela, j'avais un serveur de développement fonctionnel exécutant la version référentielle de php. - Ensuite, j'ai utilisé phpfarm pour créer deux installations php, une pour 5.3.17 et une pour 5.4.7. La localisation de phpfarm est
/etc/php/phpfarm
, donc les exécutables sont en/etc/php/phpfarm/inst/php-{version}/bin
- Ensuite, j'active suaxec et fastcgi pour apache et disabe mod_php avec
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
Ensuite, j'ai édité
/etc/apache2/mods-enabled/fastcgi.conf
pour 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>
Ensuite,
/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 du 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. Au final, j'ai trois fichiers
/etc/apache2/sites-enabled
: 000-default, 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 / hosts 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 fonctionnent, mais malheureusement ce n'est pas le cas. Au lieu de cela, un fichier php passe par php, il sort 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 n'arrive pas à comprendre où ça va mal.
/var/www/cgi-bin/php-cgi-5.4.7
à/var/www/cgi-bin/php54.fcgi
par exemple ou tout simplement/var/www/cgi-bin/php.fcgi
. Pouvez-vous vérifier si cela aide? Juste pour la version 5.4.7.Action php-cgi /php-fcgi/php547.fcgi
Réponses:
Dans vos hôtes virtuels, vous avez ajouté un gestionnaire, mais vous ne l'avez pas défini, c'est pourquoi il n'est pas traité. Ajouter:
avant
</Directory>
dans chaque fichier d'hôtes virtuels.la source
J'ai aimé ce bref aperçu étape par étape de SeeDoubleYou et je voulais l'essayer moi-même. Ce qui manquait était
sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
duvhost.conf
fichiersudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
FastCgiWrapper /usr/lib/apache2/suexec
dufastcgi.conf
fichierFastCgiIpcDir /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 des fichiers .htaccess ou vhosts: ce n'est pas possible avec FCGI. À la place, vous pouvez utiliser des fichiers .user.ini pour définir des configurations php.ini spécifiques au répertoire.
la source