Добавить в FacebookДобавить в Google BookmarksДобавить в TwitterДобавить в OdnoklassnikiДобавить в Vkcom

Создам я, пожалуй, очередную запись чтобы не забыть. Недавно появилась у меня необходимость установить и запустить несколько версий php под одним сервером apache. Собственно, нужно было запустить сайт, который мог работать под php 5.6 и не запускался под установленным по умолчанию php 7.0. Я рассматривал разные варианты и меня устроил запуск старой версии php 5.6 через fastcgi. Итак, у меня уже установлен сервер apache 2.4 и установлен php 7.0. Начнем со скачивания и сборки php 5.6. Выполним необходимые команды:

apt-get -y install build-essential libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev pkg-config

mkdir /opt/php-5.6.30 #создаем папку в которой будет скомпилированная весия php

mkdir /usr/local/src/php5-build # создаем папку для исходников

cd /usr/local/src/php5-build # перейдем в эту папку

wget http://de.php.net/get/php-5.6.30.tar.bz2/from/this/mirror -O php-5.6.30.tar.bz2# скачаем архив с исходниками

tar jxf php-5.6.30.tar.bz2# распакуем архив

cd php-5.6.30/# перейдем в папку с исходниками

далее сконфигурируем и скомпилируем php-5.6.30.

./configure --prefix=/opt/php-5.6.30 --with-config-file-path=/opt/php-5.6.30 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl=/usr/bin --with-mcrypt --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-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --enable-ftp --with-kerberos --with-gettext --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --enable-cgi

скомпилируем и установим 

make

make install

По окончанию выполнения у Вас в каталоге /opt/php-5.6.30/ будет скомпилированная версия php-5.6.30.

Далее необходимо установить модуль для apache.

apt-get install libapache2-mod-fastcgi

и запустить его и другой модуль.

a2enmod fastcgi

a2enmod actions

Далее отредактируем конфигурационный файл /etc/apache2/mods-enabled/fastcgi.conf (привожу содержимое).

<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  #FastCgiWrapper /usr/lib/apache2/suexec
  FastCgiIpcDir /var/lib/apache2/fastcgi
  FastCgiServer /usr/lib/cgi-bin/php56-cgi -idle-timeout 240
</IfModule>

 

Потом создадим обертку через которую будут выполняться скрипты php.

vi /usr/lib/cgi-bin/php56-cgi

#!/bin/sh
PHPRC="/opt/php-5.6.30/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php-5.6.30/bin/php-cgi
 
Добавим права на выполнение.
sudo chmod +x /usr/lib/cgi-bin/php56-cgi
 
Создадим конфигурационный файл apache с настройками обработчика php скриптов.
 
vi /etc/apache2/php56.conf
 
<Directory /usr/lib/cgi-bin/>
LogLevel warn
Options -Indexes +FollowSymLinks +ExecCGI
Require all granted
</Directory>
<FilesMatch "\.php">
SetHandler application/x-httpd-php5
</FilesMatch>
ScriptAlias /php56-cgi /usr/lib/cgi-bin/php56-cgi
Action application/x-httpd-php5 /php56-cgi
AddHandler application/x-httpd-php5 .php
 
Осталось создать конфигурационный файл виртуального хоста и добавить импорт php56.conf.
 
vi /etc/apache2/sites-available/test.conf
 
<VirtualHost *:80>
        
        Include php56.conf
 
        ServerName test.local
 
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/test
        <Directory /var/www/test>
        Options  Indexes FollowSymLinks
        AllowOverride all
        Require all granted
        </Directory>               
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined        
</VirtualHost>
 
Добавим данный виртуальный хост в конфигурацию apache
 
a2ensite test.conf
 
и перезапустить сервис
 
service apache2 restart
 
Для проверки создадим файл 
 
vi /var/www/test/phpinfo.php
 
<?php
phpinfo();
?>
 
Вуаля. Имеем одну версию php на одном сайте.
 
 
И другую версию на другом сайте.
 
 
Вот, пожалуй, и все.

Желаю Вам удачи.

Автор: Darkeye.  

Еще интересное в сети.

  

 

Похожие материалы

Перейти к ленте статей

Комментарии   

#6 Darkeye 08.10.2017 17:30
Упс. Забыл дописать что нужно добавить права на выполнение. Apache вовсе не нужно быть владельцем обертки. Даже, с точки зрения безопасности, нельзя. Достаточно прав на выполнение скрипта. У меня права доступа выглядят так.
darkeye@Helium-3:~$ sudo ls -lh /usr/lib/cgi-bin/
[sudo] пароль для darkeye:
итого 4,0K
-rwxr-xr-x 1 root root 185 Окт 7 09:53 php56-cgi. Дописал команду sudo chmod +x в заметке.йй
Цитировать
#5 Free 08.10.2017 17:22
Да это они. еще по моему парочки не хватает. У меня так же все уже было установлен весь LAMP. дальше столкнулся с проблемой при рестарте апача. пишет что доступ к FastCgiServer /usr/lib/cgi-bi n/php56-cgi у этого пользователя нет (uid33) я сделал этой папки права www-data и добавил своего пользователя в эту группу. эфекта нет( . есть мысли по этому поводу?
Цитировать
#4 Darkeye 08.10.2017 12:28
Ну вообще то компилировать пакеты нужно на подготовленной машине. Как минимум с установленным gcc, библиотеками,ap ache с дополнениями. Php тоже им бы неплохо иметь установленным. Да и проще простого прочесть чего не хватает и доставить. Что что а ставить пакеты apt-get - это не компилировать их с кучей зависимостей. Куда проще. В целом заметка не для начинающих пользователей - им второй php ни к чему. Я ее написал чтобы запомнить какие конфиги делать. Я даже не знаю какие пакеты нужно дописать ибо у меня система не ругалась. могу предположить что нужно доставить openssl но он у меня уже стоял. У меня на системе с apache,php,mysq l все собралось без проблем. В общем добавил apt-get библиотек на мой взгляд необходимых в самом начале.
Цитировать
#3 Free 08.10.2017 08:20
Ты конечно все написал замечательно. Но надо учитывать что еще кучу пакетов надо поставить иначе ./configure сыпит ошибки. Добавь строку что нужны доп пакеты......... что бы ./configure закончил удачно. Иначе make не работает. )))
Цитировать
#2 Darkeye 08.10.2017 02:58
Ну если комментарий в 5:00 утра тогда действительно помогло :-)
Цитировать
#1 Ralari 08.10.2017 00:08
Огромное Вам спасибо за статью, очень помогло! :-)
Цитировать

Добавить комментарий