Несколько версий php на одном apache (httpd) на CentOS, RHEL через FastCGI средствами phpfarm

Нашел простой, но удобный способ запустить несколько версий php на одном сервере apache на CentOS и RHEL без suphp. Тестировалось на CentOS 6.5 и CentOS 7.

Ключевые слова: Centos 6.5 FastCGI Apache MySQL PHPFarm Multiple PHP’s

Шаг 1.

Первым делом установим набор необходимых пакетов для сборки PHP и другие вспомогательные утилиты:

Для упрощения установки и сборки разных версий PHP, будем использовать  утилиту PHPFarm, которая доступна на GitHub. Установим:

PHPFarm поддерживает возможность настройки параметров компиляции, актуальная документация находится по адресу https://github.com/cweiske/phpfarm

Для каждой версии необходимой версии PHP запустим следующие команды:

Выбрал последние версии, заявленные на сайте php.net.

 Шаг 2.

Далее необходимо добавить пути к phpfarm в профайлы пользователей, для этого у пользователей добавляем в ~/.bashrc (либо в общий файл настроек для всех пользователей сразу в /etc/bashrc) в самый конец следующую строку

После этого вводим следующую команду, чтобы добавить новые пути без перезахода в терминал:

Проверяем возможность выбора версии php, должны увидеть такое сообщение после ввода команды:

Если увидим ошибку, что команда switch-phpfarm не найдена, то значит ошиблись во внесении путей в переменную PATH. Если ошибка по самому php, то либо указана неверная версия php, либо проблема с установкой php или phpfarm.

Далее добавим rpmforge репозиторий (для разных версий ОС своя RPM, смотрим тут http://repoforge.org/use/):

Устанавливаем необходимые пакеты (на Apache выше версии 2.2 нужно использовать вместо mod_fastcgi — mod_proxy_fcgi, встроенный в вебсервер по умолчанию):

В document_root директории веб сервера (/var/www) создаем скрипты обработчики для php разных версий:

Для каждой версии php необходимо создать свой скрипт обработчик:

со следующим содержимым:

Как видим, необходимо указать путь к обработчику php нужной версии (/opt/phpfarm/inst/bin/php-cgi-5.6.4) и к конфигурационному файлу (/opt/phpfarm/inst/php-5.6.4/lib/php.ini)

И так для каждой версии PHP.

Далее необходимо файлы сделать исполняемыми и поменять владельца/группу для каждого обработчика:

Далее для тестов создадим виртуальный хост test.com (/etc/httpd/conf.d/test.com.conf):

Две важных строки, в которых создаем алиас директории с нашими обработчиками:

И указываем конкретный обработчик php для данного виртуального хоста:

Перезапустим apache service httpd restart и посмотрим на результат:


  • Дмитрий

    Не работает с поддоменом , на котором должна работать другая версия php.

    • Delfi

      С точки зрения настройки — разницы нет между поддоменом и доменом.
      Для поддомена, для рутовой директории нужно так же прописать
      AddHandler php-cgi .php
      Action php-cgi /cgi-bin/php.fastcgi.5.6.4
      с нужной версией php и должно работать.
      Без конкретики ничего не подсказать, нужны подробности.