在Ubuntu上同时使用多个php版本

我希望能够在运行Ubuntu 12.04的开发框中运行多个php版本。 我想要完成的是,当我使用localhost作为域默认使用(让我们说php 5.3.17)。 当我使用域名为php 5.4.7时使用547.localhost。 我见过一些教程,使用fastcgi这个工作,但直到现在我还没有能够得到它的工作。 我看过这些教程:

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

就我所知,我已经做了所需要的一切。 问题是,PHP根本不运行。 当我去http://localhost/somephpfile.php它只是输出的PHP文件的来源。 对于http://547.localhost/somephpfile.php

我会分解我所采取的步骤,希望有人能够发现我错过了什么。

  1. 首先,我使用sudo apt-get install lamp-server^ phpmyadmin安装了一个默认灯pipe栈。 在此之后,我有一个运行PHP版本的工作的开发服务器。
  2. 然后我用phpfarm创build两个php安装,一个用于5.3.17,一个用于5.4.7。 phpfarm的地方是/etc/php/phpfarm ,所以可执行文件在/etc/php/phpfarm/inst/php-{version}/bin
  3. 然后,我启用suaxec和fastcgi的Apache和disabe mod_php与sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. 接下来,我编辑了/etc/apache2/mods-enabled/fastcgi.conf来读取:

     <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. 然后在/var/www/我创build了一个文件夹cgi-bin,并在这个文件夹中有两个文件,每个php版本如下(我只显示了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. 最后一步是创build虚拟主机。 最后我在/etc/apache2/sites-enabled有三个文件:000-default,php5.3.17和php5.4.7以下内容:

    默认:

     <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. 最后我改变了/ etc / hosts来阅读

     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 

现在我希望事情能够奏效,但是可悲的是他们没有。 相反,PHP文件运行通过PHP它只是输出原始文件。

这里肯定有一些我想念的东西,但是我已经经历了很多次,我弄不清楚哪里出了问题。

在你的虚拟主机中,你添加了一个处理程序,但是你没有设置处理程序,这就是为什么它没有被处理。 加:

 <FilesMatch "\.php$"> SetHandler php-cgi </FilesMatch> 

在每个虚拟主机文件之前</Directory>

我喜欢SeeDoubleYou这个简短的一步一步的概述,并且想亲自尝试一下。 缺less的是

  • sudo chmod +x /var/www/cgi-bin/*
    • 由于没有执行,Apache不能执行CGI脚本
    • 这是vhost.conf文件中的Action php-cgi /php-fcgi/php<version>.fcgi行所vhost.conf
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec可执行文件和fastcgi模块丢失,他们必须先安装
    • fastcgi.conf文件中的FastCgiWrapper /usr/lib/apache2/suexec行需要suexec可执行文件
  • 我也必须删除FastCgiIpcDir /var/lib/apache2/fastcgi
    • 否则我得到错误信息FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

对于任何尝试通过.htaccess或vhosts文件设置php_admin_value和php_value的人:这对于FCGI来说是不可能的。 相反,您可以使用.user.ini文件来设置特定于目录的php.iniconfiguration。