我在本地服务器上有两个项目,一个项目运行PHP5.6,另一个项目运行PHP7.0。现在可以根据项目启用这两个版本吗?我已经尝试在其中一个项目htaccess中添加AddHandler application/x-httpd-php7 .php
,但它无效。目前,PHP7.0和PHP5.6-fpm已经安装在服务器上。下面是phpinfo的截图。
答案 0 :(得分:25)
所以在Google上搜索了一整天。我设法在不同的PHP版本上运行FastCgi中的两个项目。感谢来自forum的人。我卸载了包括Apache在内的所有内容并重新开始。以下是我在本地服务器上启用两个版本的PHP的步骤。顺便说一下,我的电脑在Linux Mint 18上运行。
假设您已经安装了Apache,为这两个项目创建了虚拟主机并添加了必要的php PPA。让我们为PHP 5.6调用项目site56.local
,为PHP 7.0调用site70.local
。通过运行:
php5.6-fpm
和php7.0-fpm
sudo apt-get install php5.6-fpm
sudo apt-get install php7.0-fpm
在/usr/lib/cgi-bin/
下创建两个文件(老实说,我不知道这个步骤是否仍然有必要),并保存:
sudo nano /usr/lib/cgi-bin/php56-fcgi
sudo nano /usr/lib/cgi-bin/php70-fcgi
打开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>
现在启用新的apache config:
sudo a2enconf php5.6-fpm
如果你安装了php5.6和php5.7,请确保禁用这两个并重新启动apache:
sudo a2dismod php5.6 php7.0
sudo systemctl restart apache2
在应该在php7.0上运行的项目上创建一个.htacces
文件并添加此处理程序:
AddHandler php70-fcgi .php
现在在两个项目上创建一个phpinfo文件,如果你看到这样的话,那么恭喜你!
PS:确保在apache2.conf或httpd.conf
中启用htaccess答案 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文件或系统用于启动的任何文件即可。