У меня есть два проекта на локальном сервере, один проект работает на PHP5.6, а другой - на PHP7.0. Теперь можно ли будет включить эти две версии на основе проектов? Я уже пытался добавить AddHandler application/x-httpd-php7.php
в один из проектов htaccess, но он не работает. В настоящее время на сервере уже установлены PHP7.0 и PHP5.6-fpm. Ниже приведен скриншот phpinfo.
Запуск двух версий PHP на одном сервере
Ответ 1
Так что после поиска в гугле на весь день. Мне удалось запустить два моих проекта в FastCgi на разных версиях php. Спасибо ребятам с этого форума. Я удалил все, включая Apache и начать все заново. Ниже приведены шаги, которые я использовал для включения двух версий PHP на моем локальном сервере. Кстати, мой компьютер работает на Linux Mint 18.
-
Предполагая, что вы уже установили Apache, создали виртуальный хост для двух проектов и добавили необходимые php PPA. Позвольте назвать проекты
site56.local
для PHP 5.6 иsite70.local
для PHP 7.0. Установите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 conf
/etc/apache2/conf-available/php5.6-fpm.conf
, добавьте этот/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:
sudo a2enconf php5.6-fpm
-
Если вы установили php5.6 и php5.7, убедитесь, что вы отключили эти два и перезапустите apache:
sudo a2dismod php5.6 php7.0 sudo systemctl restart apache2
-
Создайте файл
.htacces
в проекте, который должен работать на php7.0, и добавьте этот обработчик:AddHandler php70-fcgi .php
-
Теперь создайте файл phpinfo для двух проектов, и если вы видите что-то подобное, то поздравляю!
PS: убедитесь, что вы включили htaccess в вашем apache2.conf или httpd.conf
Ответ 2
Прежде всего, убедитесь, что вся связанная с 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 [email protected]
DocumentRoot /var/www/symfony.local/curr/public
<Directory /var/www/symfony.local/curr/web>
AllowOverride All
</Directory>
</VirtualHost>
Ответ 3
Он не работает для 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"
Он должен сделать трюк:)
Ответ 4
Я попытался реализовать решение Makubex, и он сработал. Есть только одна проблема с недавно установленной LAMP, и это был факт, что fastcgi не был включен. Я только что установил php, используя следующий script и включив 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
После этого решение работало отлично. Я получил два выше от Запустить несколько PHP-версий на одном сервере с помощью php-fpm и xdebug на Ubuntu 16.04
Ответ 5
После попытки следовать вашим указаниям я нашел, возможно, более простой способ для того же результата.
Добавив следующую строку
ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "fcgi://localhost:9070/var/www/" enablereuse=on
в конфигурации Apache vhost, вы можете изменить версию php внутри каталога php70project в вашем vhost root/var/www до версии 7, работающей как fastcgi.
Следующий подход для использования с unix-сокетом
ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "unix:/var/run/php70fpm.sock|fcgi://localhost/var/www"
не работает должным образом. К сожалению, я не смог найти правильный код, чтобы получить эту работу, но поскольку нет примера для использования сокета unix с подпапкой на этой странице https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html it может быть просто невозможно.
Ответ 6
перемещено как комментарий, это не ответ.