Установка PHP 5.2 в Debian 7.8. Собираем старый PHP из исходников
Рубрика: Администрирование -> Linux -> PHP -> Без рамки
Метки: apache | linux | OpenSource | PHP | soft | инструменты | полезности | советы
Просмотров: 14775
Предположим, что в нашей системе установлена последняя версия php из репозиториев. У пользователей Debian 7.8 это будет 5.4. Все бы хорошо, но тут у нас появляется некий «проект», который категорически отказывается работать на современном ПО. Ему подавай только PHP 5.2! Не будем обсуждать качество кода и возможность его переписывания на новый лад. Наша задача попытаться установить в текущее окружение древнюю версию php, сохранив при этом работоспособность версии 5.4. В идеале мы должны получить возможность использовать 5.4 для одних сайтов, а 5.2 для других. Итак, под катом мой вариант установки PHP 5.2 в Debian 7.
Пятиминутная готовность
Как установить последнуюю версию PHP из репозитория в Debian я уже рассказывал. Поэтому будем считать, что PHP 5.4 и Apache у вас уже установлены. Теперь возьмемся за PHP 5.2
Установка пакетов необходимых для сборки php 5.2
Сначала установим несколько дополнительных пакетов. Они нам потребуются во время сборки старичка PHP 5.2.
apt-get install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev make libxslt1-dev libbz2-dev libmcrypt-dev libmhash-dev libfcgi-dev libmhash-dev
Теперь необходимо создать символические ссылки на некоторые из выше перечисленных библиотек. PHP будет искать их именно в этих директориях.
ln -s /usr/lib/i386-linux-gnu/libjpeg.a /usr/lib/libjpeg.a ln -s /lib/i386-linux-gnu/libpng12.so.0.49.0 /usr/lib/libpng.so ln -s /usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so
Загружаем исходники php 5.2
Загрузим нужную версию php из музея - http://museum.php.net/php5/. Находим в списке версию 5.2 и копируем на нее ссылку. Затем переходим в консоль и загружаем ее на север:
wget http://museum.php.net/php5/php-5.2.17.tar.gz
После загрузки извлекаем содержимое архива во временную папку:
tar -xzf php-5.2.17.tar.gz -C /tmp cd /tmp/php-5.2.17/
Собираем php 5.2
Следующим шагом будет сборка php. Выполняем:
./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --enable-mbstring --with-mcrypt
В случае успеха увидим текст лицензионного соглашения (на удивление оно не такое большое) и благодарности за выбор php.
+--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP.
Сконфигурировали, теперь устанавливаем:
make make install
После метровой портянки мало полезной служебной информации, готовый к работе php, развернется в директории /opt/php52. Можно прямо сейчас выполнить команду и убедиться, что мы установили именно версию 5.2:
/opt/php5.2/bin/php -version
Результатом должно быть что-то вроде:
PHP 5.2.17 (cli) (built: Apr 22 2015 00:34:48) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
Последним шагом выставляем права на директорию с php:
chmod ugo+rX -R /opt/php5.2/
Соединяемся с Apache
Я буду считать, что Apache уже в вашей системе настроен. Если нет, то можете воспользоваться либо этой инструкцией или самостоятельно собрать Apache из исходников. В общем, выбирайте любой удобный для вас способ, а я буду ориентироваться на первый вариант (Apache, установленный из репозитория).
Готовим тестовую страницу
Для удобства тестирования, сразу создадим файлик phpinfo.php:
nano /var/www/phpinfo.php
В нем пишем вызов, знакомой каждому php’шнику функции:
<?php phpinfo();
Сохраняем (Ctrl + O) и закрываем файл (Ctrl + X).
Устанавливаем модуль libapache2-mod-fastcgi
Для организации нашего плана нам обязательно придется установить дополнительный модуль для Apache – libapache2-mod-fastcgi. В репозиториях, прописанных в Debian по умолчанию, этого модуля нет. Откроем список репозиториев (/etc/apt/sources.list) и доведем его до следующего вида:
deb http://mirrors.digitalocean.com/debian wheezy main deb http://ftp.es.debian.org/debian stable main contrib non-free deb-src http://ftp.es.debian.org/debian stable main contrib non-free deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free
Сохраняем изменения в sources.list. Затем обновим список пакетов:
apt-get update
Отлично, теперь все готово для установки модуля libapache2-mod-fastcgi:
apt-get install libapache2-mod-fastcgi
Модуль поставили, активируем его:
a2enmod actions fastcgi
Если модуль успешно установился и активировался, то результатом выполнения последней команды будет:
Module actions already enabled Module fastcgi already enabled
Подключаем PHP как FastCGI
Первым делом нам необходимо сделать обертку для наших скриптов. Создадим в директории с нашим сайтов каталог cgi-bin, выставим на него соответствующие права и сделаем конфиг для php:
mkdir /var/www/cgi-bin/ chmod o+rX /var/www/cgi-bin/
Создаем новый файл php52.fcgi:
nano /var/www/cgi-bin/php52.fcgi
Наполняем следующим содержимым:
#!/bin/sh export PHP_FCGI_CHILDREN=4 export PHP_FCGI_MAX_REQUESTS=200 #export PHPRC="/var/www/php.ini" //Путь к конфигу exec /opt/php5.2/bin/php-cgi
и устанавливаем права:
chmod a+rx /var/www/cgi-bin/php52.fcgi
Все, осталось сообщить Apache о нашем намерении использовать FastCGI для определенного сайта. В моем случае таким сайтом является default. В его конфигурационный файл (nano /etc/apache2/sites-available/default) дописываем:
php_admin_flag engine off ScriptAlias /cgi-bin /var/www/cgi-bin Action application/x-httpd-php /cgi-bin/php52.fcgi
Все, остается только перезапустить Apache и можно приступать к тестированию:
service apache2 restart
Тестируем версии php
Для начала проверим, как работает у нас версия 5.2. Обратитесь к подготовленному файлу phpinfo.php через браузер. В шапке страницы должна отображаться версия “PHP Version 5.2.17”. Отлично, первый тест пройдет. Теперь попробуем запустить этот же сценарий, но под PHP 5.4. Открываем конфигурационный файл сайт (у меня это /etc/apache2/sites-available/default) и комментируем строки (ставим перед строкой символ диеза):
# php_admin_flag engine off # ScriptAlias /cgi-bin /var/www/cgi-bin # Action application/x-httpd-php /cgi-bin/php52.fcgi
После этого перезагружаем Apache и вновь пробуем обратиться к сценарию phpinfo.php. Теперь он должен быть обработан последней версией php.
Дополнение для x64
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.a /usr/lib/libjpeg.a ln -s /lib/x86_64-linux-gnu/libpng12.so.0.49.0 /usr/lib/libpng.so ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so