poloniumv's

Несколько версий PHP на Apache2 в Arch Linux

1 февраля 2017 г. 12:10

Третьего дня понадобилось перенести несколько веб-сайтов с довольно старой машины на более новую. Часть сайтов с ходу не завелась, т. к. писалась еще за царя Панька. Да и искать того кто писал и просить исправить, дабы на новой версии PHP работало, бессмысленно. Поэтому, собственно, сабж.

Собираем старую версию php (мне надо была 5.4):

yaourt -S php54

Доставляем к основному php (у меня версии 7) cgi-модуль и FastCGI-модуль для Apache2:

sudo pacman -S php-cgi mod_fcgid

Создаем каталог для fcgi-файлов и сами fcgi-файлы:

sudo mkdir /srv/http/cgi-bin
sudo nano /srv/http/cgi-bin/php54.fcgi
#!/bin/bash

PHPRC="/etc/php54/php.ini"
PHP_CGI=/usr/bin/php54-cgi
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUEST=3000

export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS

exec $PHP_CGI
sudo nano /srv/http/cgi-bin/php7.fcgi
#!/bin/bash

PHPRC="/etc/php/php.ini"
PHP_CGI=/usr/bin/php-cgi
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUEST=3000

export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS

exec $PHP_CGI

Далее добавляем в /etc/httpd/conf/httpd.conf несолько строк:

Include conf/extra/fcgid_module.conf
LoadModule actions_module modules/mod_actions.so

Создаем конфиг для модуля fcgid:

sudo nano /etc/httpd/conf/extra/fcgid_module.conf
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule mod_fcgid.c>
    AddHandler fcgid-script fcg fcgi fpl
    Action application/x-httpd-php54 /cgi-bin/php54.fcgi
    AddType application/x-httpd-php54 .php54
    Action application/x-httpd-php7 /cgi-bin/php7.fcgi
    AddType application/x-httpd-php7 .php7
    FcgidIPCDir /var/run/httpd
    FcgidProcessTableFile /var/run/httpd/fcgid_shm
</IfModule>

Даем права рабочему каталогу /var/run/httpd

sudo chmod -R 777 /var/run/httpd

И, напоследок, в конфиге нашего VirtualHost'а указываем какой версией PHP желаем пользоваться:

<IfModule mod_fcgid.c>
    <FilesMatch \.php$>
        SetHandler application/x-httpd-phpX
    </FilesMatch>
</Ifmodule>

, где X -- желаемая версия PHP