web-dev-qa-db-fra.com

Plusieurs versions PHP simultanément sur Ubuntu

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:

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiples-php-versions-ubuntucucid-10-04/
  2. http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/

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é.

  1. J'ai d'abord installé une pile de lampe par défaut à l'aide de 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.
  2. Ensuite, j'ai utilisé phpfarm pour créer deux installations PHP, une pour 5.3.17 et une pour 5,4,7. La localité de phpfarm est /etc/php/phpfarm, les exécutables sont donc en /etc/php/phpfarm/inst/php-{version}/bin
  3. Ensuite, j'active Suaxec et Fastcgi pour Apache et Disabe Mod_PHP avec Sudo a2enmod fastcgi actions suexec && Sudo a2dismod php5
  4. 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>
    
  5. 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
    
  6. 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>
    
  7. 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.

16
SeeDoubleYou

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.

2
user138869

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/*
    • Comme cela n'a pas été exécuté, Apache n'était pas en mesure d'exécuter les scripts CGI.
    • Ceci est nécessaire pour la ligne Action php-cgi /php-fcgi/php<version>.fcgi dans le vhost.conf déposer
  • Sudo apt-get install Apache2-suexec-pristine libapache2-mod-fastcgi
    • le module exécutable SUELEXEC et FASTCGI étaient manquants, ils devaient être installés d'abord
    • L'exécutable SUEXEC est nécessaire pour la ligne FastCgiWrapper /usr/lib/Apache2/suexec dans le fastcgi.conf déposer
  • J'ai aussi dû supprimer la ligne FastCgiIpcDir /var/lib/Apache2/fastcgi
    • sinon, j'ai eu le message d'erreur 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.

0
Elektropepi