Запуск двух версий PHP на одном сервере

У меня есть два проекта на локальном сервере, один проект работает на PHP5.6, а другой - на PHP7.0. Теперь можно ли будет включить эти две версии на основе проектов? Я уже пытался добавить AddHandler application/x-httpd-php7.php в один из проектов htaccess, но он не работает. В настоящее время на сервере уже установлены PHP7.0 и PHP5.6-fpm. Ниже приведен скриншот phpinfo.

enter image description here

Ответ 1

Так что после поиска в гугле на весь день. Мне удалось запустить два моих проекта в FastCgi на разных версиях php. Спасибо ребятам с этого форума. Я удалил все, включая Apache и начать все заново. Ниже приведены шаги, которые я использовал для включения двух версий PHP на моем локальном сервере. Кстати, мой компьютер работает на Linux Mint 18.

  1. Предполагая, что вы уже установили 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
    
  2. Создайте два файла в /usr/lib/cgi-bin/ (честно говоря, я не знаю, нужен ли этот шаг по-прежнему) и сохраните:

    sudo nano /usr/lib/cgi-bin/php56-fcgi
    sudo nano /usr/lib/cgi-bin/php70-fcgi
    
  3. Откройте файл 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>
    
  4. Теперь включите новую конфигурацию apache:

    sudo a2enconf php5.6-fpm
    
  5. Если вы установили php5.6 и php5.7, убедитесь, что вы отключили эти два и перезапустите apache:

    sudo a2dismod php5.6 php7.0
    sudo systemctl restart apache2
    
  6. Создайте файл .htacces в проекте, который должен работать на php7.0, и добавьте этот обработчик:

    AddHandler php70-fcgi .php
    
  7. Теперь создайте файл phpinfo для двух проектов, и если вы видите что-то подобное, то поздравляю!

PS: убедитесь, что вы включили htaccess в вашем apache2.conf или httpd.conf

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

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

Ответ 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

перемещено как комментарий, это не ответ.