Одновременная работа нескольких версий PHP на сервере Debian/Ubuntu
Речь в заметке пойдёт о модуле PHP7, покдлюченном как модуль апача на всём сервере, и PHP5.6, подключенном как PHP-CGI у нужных сайтов.
И речь пойдёт не о быстрой смене версии php на всём сервере, а именно о том, чтобы, например, все сайты на сервере работали с PHP7, а один или несколько, например с PHP5.
Поехали!
Скачиваем исходники PHP нужной версии, распаковываем и переходим в папку с ними
$ cd /tmp $ wget -O php-5.6.16.tar.bz2 http://php.net/get/php-5.6.16.tar.bz2/from/this/mirror $ tar -xvf php-5.6.16.tar.bz2 $ cd php-5.6.16
Собираем нужную версию php
Компилируем php тремя коммандами:
1.
./configure \ --enable-pdo \ --with-pdo-mysql \ --with-mysql \ --with-mysqli \ --enable-mbstring \ --with-curl \ --with-gd \ --with-mcrypt \ --with-vpx-dir \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-xpm-dir \ --with-zlib-dir \ --with-openssl \ --with-pear
Во время конфигурирования скорее всего будут ошибки. Они по большей части свидетельствуют о отсутствующих пакетах на сервере. Названия недостающих легко гугляться.
2.
$ make
3.
$ make install
Копируем получившийся бинарник
Файл /usr/local/bin/php-cgi надо переименовать и положить по пути /usr/lib/cgi-bin/php5
Настраиваем нужный VirtualHost апача для работы с нашим бинарником
Ну и самое главное — это заставить нужный хост не работать как модуль апача. Скажу честно, на поиск решения я потратил не мало времени.
Эти строчки нужно добавить в нужный VirtualHost
<FilesMatch \.php$> SetHandler application/x-httpd-php5 </FilesMatch> AddHandler application/x-httpd-php5 .php Action application/x-httpd-php5 /cgi-bin/php5
Нюансы и возможные проблемы
- Ошибка: Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration
Не включен модуль апача actions. Включаем:
$ a2enmod actions $ service apache2 restart
Файл php.ini будет погдружаться из папки /usr/local/lib/. Изменить это можно опцией --with-config-file-path с выбором при компиляции.
Также должен быть включен конфиг апача serve-cgi-bin
$ a2enconf serve-cgi-bin $ service apache2 restart
19 комментариев
Большое спасибо! очень выручило это решение!!! Всё отлично работает!
P.S. от себя могу добавить, что пунктик "Копируем получившийся бинарник" я для себя заменил на "делаею симлинк".
Ссылка для wget неправильная. Покатит, например, такой вариант http://ua2.php.net/get/php-5.6.28.tar.gz/from/this/mirror
А у меня установился рядом просто методом apt-get install php5.6 - можно в таком случае его заюзать для отдельных сайтов?
А, гоню. Правильная ссылка.
Ну и, собственно, у меня всё закончилось ошибкой
The requested URL /cgi-bin/php5/phpinfo.php was not found on this server
во что переименовать бинарник?
Респект :) Я чайник из чайников - а всё заработало с первого раза. От души, БЛАГОДАРЮ !!!
значит мод CGI не включен. Попробуйте: a2enmod cgi sevice apache2 restart
Здравствуйте! У меня такая же проблема. Ошибка The requested URL /cgi-bin/php5/phpinfo.php was not found on this server. В гугле ничего не нашел, говорят, что на centos7 apache mod_cgi уже включен. Помогите, пожалуйста.
Тоже ошибка The requested URL /cgi-bin/php5/phpinfo.php was not found on this server. Гугл говорит, что в centos7 mod_cgi уже включен. Помогите разобраться, пожалуйста!
У меня make не выполняется, сделал все по инструкции, Linux Ubuntu 16 Server LTS, 64 бита. Что делать ?
Ошибки при этом какие-то есть?
При вводе команды make, выдает:
Не заданы цели и не найден make-файл. Останов.
Установил до этого VestaCP с php 7, MySQL, Apache и phpMyAdmin (LAMP-сервер)
При это первая команда отрабатывает без ошибок?
Первая команда это ./configure \ ? Вроде сборка идёт - как проверить, что нормально отработала?
По-моему, она в конце напишет, всего ли хватает.
Оказывается ошибка была в том, что не был установлен xml2 пакет - нашел на stackoverflow.com:
sudo apt-get install libxml2-dev
После того как скопировал получившийся бинарник в /usr/lib/cgi-bin/php5 - при вводе команды php -v выдает версию 5.6, хотя глобально стоит версия 7.0, т.е. получается версия php затирается версией 5.6 ?
У вас написано:
"Файл /usr/local/bin/php-cgi надо переименовать и положить по пути /usr/lib/cgi-bin/php5"
sudo cp /usr/local/bin/php-cgi /usr/lib/cgi-bin/php5 ? (то есть в /usr/lib/cgi-bin будет лежать файл php5)