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

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

введите описание изображения здесь

12

Решение

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

  1. Предполагая, что вы уже установили Apache, создали виртуальный хост для двух проектов и добавили необходимые php PPA. Давайте назовем проекты site56.local для php5.6 и site70.local для php7.0. Установите php5.6-fpm и php7.0-fpm, запустив.

sudo apt-get установить php5.6-fpm

sudo apt-get установить php7.0-fpm

  1. Создайте два файла в / usr / lib / cgi-bin / (честно говоря, я не знаю, нужен ли этот шаг по-прежнему) и сохраните.

sudo nano / usr / lib / cgi-bin / php56-fcgi

sudo nano / usr / lib / cgi-bin / php70-fcgi

  1. Откройте файл php56 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>

  2. Теперь включите новую конфигурацию apache.

sudo a2enconf php5.6-fpm

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

sudo a2dismod php5.6 php7.0

sudo systemctl перезапустить apache2

  1. Создайте файл .htacces в проекте, который должен работать на php7.0, и добавьте этот обработчик.

AddHandler php70-fcgi .php

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

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

site56.local / phpinfo.php
введите описание изображения здесь

site70.local / phpinfo.php
введите описание изображения здесь

20

Другие решения

Прежде всего, убедитесь, что все связанные с 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>
6

Это не работает для 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"

Это должно сделать свое дело 🙂

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

После этого решение сработало отлично.
Я получил два выше от Запустите несколько версий PHP на одном сервере, используя php-fpm и xdebug в Ubuntu 16.04

1

После попытки следовать вашим указаниям я нашел, возможно, более легкий путь для того же результата.

Добавив следующую строку

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

в конфигурации Apache vhost вы можете изменить версию php внутри каталога php70project в вашем корневом каталоге vhost / 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 это может быть просто невозможно.

0

Это можно сделать, отключив и включив новую версию PHP-

  • переключиться на старую версию —
    a2dismod php7.0
    перезапуск службы apache2
  • перейти на более новую версию
    a2enmod php7.0
    перезапуск службы apache2
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector