在同一台服务器上运行两个PHP版本

时间:2017-03-09 13:37:24

标签: php apache

我在本地服务器上有两个项目,一个项目运行PHP5.6,另一个项目运行PHP7.0。现在可以根据项目启用这两个版本吗?我已经尝试在其中一个项目htaccess中添加AddHandler application/x-httpd-php7 .php,但它无效。目前,PHP7.0和PHP5.6-fpm已经安装在服务器上。下面是phpinfo的截图。

enter image description here

7 个答案:

答案 0 :(得分:25)

所以在Google上搜索了一整天。我设法在不同的PHP版本上运行FastCgi中的两个项目。感谢来自forum的人。我卸载了包括Apache在内的所有内容并重新开始。以下是我在本地服务器上启用两个版本的PHP的步骤。顺便说一下,我的电脑在Linux Mint 18上运行。

  1. 假设您已经安装了Apache,为这两个项目创建了虚拟主机并添加了必要的php PPA。让我们为PHP 5.6调用项目site56.local,为PHP 7.0调用site70.local。通过运行:

    安装php5.6-fpmphp7.0-fpm
    sudo apt-get install php5.6-fpm
    sudo apt-get install php7.0-fpm
    
  2. /usr/lib/cgi-bin/下创建两个文件(老实说,我不知道这个步骤是否仍然有必要),并保存:

    sudo nano /usr/lib/cgi-bin/php56-fcgi
    sudo nano /usr/lib/cgi-bin/php70-fcgi
    
  3. 打开php56配置文件/etc/apache2/conf-available/php5.6-fpm.conf,添加此配置并保存:

    <IfModule mod_fastcgi.c>
        AddHandler php56-fcgi .php
        Action php56-fcgi /php56-fcgi
        Alias /php56-fcgi /usr/lib/cgi-bin/php56-fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization
        Action php70-fcgi /php70-fcgi
        Alias /php70-fcgi /usr/lib/cgi-bin/php70-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
    </IfModule>
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
    
  4. 现在启用新的apache config:

    sudo a2enconf php5.6-fpm
    
  5. 如果你安装了php5.6和php5.7,请确保禁用这两个并重新启动apache:

    sudo a2dismod php5.6 php7.0
    sudo systemctl restart apache2
    
  6. 在应该在php7.0上运行的项目上创建一个.htacces文件并添加此处理程序:

    AddHandler php70-fcgi .php
    
  7. 现在在两个项目上创建一个phpinfo文件,如果你看到这样的话,那么恭喜你!

  8. PS:确保在apache2.conf或httpd.conf

    中启用htaccess

    site56.local / phpinfo.php的:
    enter image description here

    site70.local / phpinfo.php的:
    enter image description here

答案 1 :(得分:7)

首先,通过运行以下命令确保禁用所有与PHP相关的配置:

#ls -la / etc / apache2 / conf-enabled | grep php

#ls -la / etc / apache2 / mods-enabled | grep php

为特定网站设置不同版本的PHP-FPM:

在现有的VirtualHost文件中添加以下行。

Include "conf-available/php7.2-fpm.conf"

例如,

#vim /etc/apache2/sites-enabled/symfony.local.conf

<VirtualHost *:80>
    ServerName symfony.local

    Include "conf-available/php7.2-fpm.conf"

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/symfony.local/curr/public

    <Directory /var/www/symfony.local/curr/web>
        AllowOverride All
    </Directory>
</VirtualHost>

答案 2 :(得分:2)

它不适用于debian 9 Stretch。我花了一段时间来确定要做什么,但最后我找到了一个似乎更容易的解决方案:

sudo apt-get install php5.6-fpm

sudo apt-get install php7.0-fpm

sudo a2enconf php5.6-fpm

如果你安装了php5.6和php5.7,请确保禁用这两个并重新启动apache。

sudo a2dismod php5.6 php7.0

sudo systemctl restart apache2

此时,您的所有网站都必须使用php 5.6。

对于需要php 7的网站,请在vhost中添加以下内容:

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/path/to/my/main/file"

它应该做的伎俩:)

答案 3 :(得分:2)

我尝试实施Makubex的解决方案并且有效。新安装的LAMP只有一个问题,那就是fastcgi没有启用。 我刚刚使用以下脚本再次安装了php,之后启用了fastcgi。

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm php5.6 php5.6-dev php5.6-mcrypt php5.6-mbstring php5.6-mysql php5.6-zip php5.6-gd php5.6-xml php7.1-fpm libapache2-mod-fastcgi php7.1-fpm php7.1 php7.1-dev php7.1-mbstring php7.1-mysql php7.1-zip php7.1-gd php7.1-xml php7.1-curl php7.1-intl php7.1-json php7.1-mcrypt

然后:

a2enmod actions
a2enmod fastcgi

在此之后,解决方案完美无缺。 我从Run multiple PHP version on the same server using php-fpm and xdebug on Ubuntu 16.04

得到了上面的两个

答案 4 :(得分:0)

在尝试遵循您的指示后,我发现可能更容易获得相同的结果。

添加以下行

ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "fcgi://localhost:9070/var/www/" enablereuse=on

在apache vhost配置中,你可以将你的vhost root / var / www目录php70project中的php版本更改为以fastcgi运行的版本7。

以下用于unix socket的方法

ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "unix:/var/run/php70fpm.sock|fcgi://localhost/var/www"

无法正常使用。 不幸的是我无法找到正确的代码来实现这一点,但由于没有使用unix socket与该页面https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html上的子文件夹一起使用的例子,它可能是不可能的。

答案 5 :(得分:0)

在Ubuntu + Nginx上使用PHP时,我们已经解决了这个问题:
https://blog.magepsycho.com/how-to-install-multiple-versions-of-php-on-ubuntu/

更改CLI PHP版本

sudo update-alternatives --set php /usr/bin/php7.2

更改Web PHP版本

fastcgi_pass unix:/run/php/php7.2-fpm.sock

可以用您选择的PHP版本替换php7.2。

答案 6 :(得分:0)

由于所有linux软件包的东西使过程变得混乱,这使工作变得更加困难。简单的手动,独立于系统的方式:

从源代码构建2个版本的PHP。您将在模块目录中说libphp7.so和libphp5.so。只需为每个文件运行一个单独的httpd.conf文件。我跑了5和7年了:

httpd-php7.conf
httpd-php5.conf

然后。只需将无法运行7的虚拟主机放在php5配置中,然后在启动时手动启动它们,或者创建rc.d文件或系统用于启动的任何文件即可。