Для различных версий Debian по умолчанию из репозитория устанавливаются различные версии РНР. Так при выполнении из консоли сервера с Debian 8 команды apt-get update && apt-get install php5 будет установлен пакет РНР версии 5.6, при выполнении той же команды на Debian 7 будет установлен пакет с версией 5.4.
Установка PHP Debian 8 (версии 5.6 и 5.4 )
Для того чтобы установить PHP. 5.6 на Debian 8 достаточно выполнить одну команду
Предварительно обновляем список подключенных репозиториев
apt-get update
Выполем установку пакета
apt-get install php5
После установки можно проверить версию выполнив команду php -v (выведется версия php-cli) или создать в корне любого сайта на сервере файл phpinfo.php, в который поместить код на PHP: <?php phpinfo(); ?>. При обращении к файлу через браузер будет выведена используемая версия РНР вместе с другими настройками.
Даунгрейд PHP на Debian 8 Jessie
В некоторых случая необходимо, чтобы на одном сервере работали сайты использующие разные версии РНР или версия РНР, которая для данной операционной системы не является используемой по умолчанию. Для примера рассмотрим сборку и установку РНР 5.4. РНР 5.6 при этом удалим.
Собирать пакет будем в другом каталоге, но исходники скачаем в /opt
cd /opt
Скачиваем исходники с официального сайта
wget http://museum.php.net/php5/php-5.4.9.tar.gz
Распаковываем архив и переходим в каталог одноименный версии РНР
tar -xzvf php-5.4.9.tar.gz
cd php-5.4.9/
Устанавливаем пакеты, которые потребуются для компиляции предварительно обновимв список репозиториев
apt-get update
apt-get install apache2-dev
apt-get install libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libmysqlclient-dev libpq-dev libicu-dev libfreetype6-dev libldap2-dev libxslt-dev
apt-get install build-essential
Создадим каталог под скомпилированный пакет
mkdir /usr/local/php
Теперь удаляем PHP 5.6
apt-get remove php5
dpkg -l | grep php5
apt-get remove php5-cgi php5-cli php5-common
apt-get remove php5-*
dpkg -l | grep php5
Последняя команда выведет все пакеты на сервере, имеющие в имени php5, если apt-get remove php5-* не справился со своей задачей удаляем все пакеты из вывода dpkg -l | grep php5 вручную
apt-get remove php5-apcu php5-cgi php5-cli php5-common php5-curl php5-gd php5-imagick php5-json php5-mcrypt php5-mysql
apt-get purge php5-*
apt-get autoremove php5-*
dpkg -l | grep php5
Убеждаемся в том, что никаких пакетов не осталось
Теперь можно перейти в каталог с исходниками и приступить к сборке
cd /opt/php-5.4.9/
./configure —prefix=/usr/local/php/ —with-config-file-path=/usr/local/php/ —with-pdo-pgsql —with-zlib-dir —enable-mbstring —with-libxml-dir=/usr —enable-soap —enable-calendar —with-curl —with-zlib —with-gd —with-pgsql —disable-rpath —enable-inline-optimization —with-zlib —enable-sockets —enable-sysvsem —enable-sysvshm —enable-pcntl —enable-mbregex —with-mhash —enable-zip —with-pcre-regex —with-mysql —with-pdo-mysql —with-mysqli —with-png-dir=/usr —enable-gd-native-ttf —with-fpm-user=nginx —with-libdir=lib64 —enable-ftp —with-kerberos —with-gettext —with-gd —with-jpeg-dir=/usr/lib/
Можно использовать при сборке дополнительные компоненты, часть из представленных удалить.
make && make install
При установка завершена успешно в выводе будет соответствующая надпись и путь к основным файлам, в т.ч. к бинарному файлу
Обратившись к нему из консоли можно увидеть установленную из исходником версию РНР
/usr/local/php/bin/php-cgi -v
Копируем из каталога с исходными кодами файл php.ini с настройками РНР
cp php.ini-production /usr/local/php/lib/php.ini
Проверяем версию
/usr/local/php/bin/php-cgi -v
PHP 5.4.9 (cgi-fcgi) (built: Jun 17 2017 15:58:19)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Настройка совместной работы собранного РНР и Apache
Теперь необходимо дать понять веб-серверу, обрабатывающему пользовательские запросы, что необходимо использовать только что установленный в систему пакет
Смотрим используется на сервере модуль РНР, fcgid или php-fpm. В данном случае заранее известно, что у нас fcgid
apache2ctl -M | grep fcgid
fcgid_module (shared)
Просматриваем конфигурационный файл
less /etc/apache2/conf-enabledphp-fcgi.conf
<FilesMatch «\.ph(p[345]?|t|tml)$»>
SetHandler application/x-httpd-php
<FilesMatch «\.phps$»>
SetHandler application/x-httpd-php-source
Order Deny,Allow
Deny from all
<FilesMatch «^\.ph(p[345]?|t|tml|ps)$»>
Order Deny,Allow
Deny from all
ScriptAlias /cgi-wrapper /var/www/web/cgi-bin/
Action application/x-httpd-php «/cgi-wrapper/php»
SetHandler fcgid-script
Order allow,deny
Allow from all
Из его содержимого видно, что обработчик скриптов подключается за счет файла /var/www/web/cgi-bin/php
Просматриваем его и видим, что в файле указывается бинарник, за счет которого и обрабатываются скрипты
less /var/www/web/cgi-bin/php
#!/usr/local/php/bin/php-cgi
Заменяем его и видим при помощи echo на тот, что указывался в выводе make
echo «#!/usr/local/php/bin/php-cgi» > /var/www/web/cgi-bin/php
Обращаясь к phphinfo теперь можем видеть, что цель достигнута и на Debian 8 работает РНР 5.4
Расширения PHP. которые не использовались при сборке можно собрать отдельно и подключить в php.ini
В php.ini также всегда имеет смысл включать логирование ошибок.