Если не установлены необходимые инструменты для компилирования php, устанавливаем набор пакетов для разработки:
yum install lemon
yum groupinstall 'Development Tools'
yum install \
libxml2-dev* \
libmhash-dev* \
libcurl-dev* \
libpng* \
libjpeg* \
libtidy-dev* \
libxslt-dev* \
libtool-ltdl-dev* \
mcrypt \
libmcrypt-dev* \
libXpm-dev* \
libsqlite* \
mysql-dev* \
mysql-libs \
sqlite-dev* \
freetype-dev* \
openssl-dev* \
bzip2-dev* \
unzip* \
patch \
make \
gcc*
Если возникает ошибка вида:
Error: Package: mysql-devel-5.1.73-3.el6_5.x86_64 (base)
Requires: mysql = 5.1.73-3.el6_5
Installed: mysql-5.5.43-1.el6.remi.x86_64 (@remi)
mysql = 5.5.43-1.el6.remi
Available: mysql-5.1.73-3.el6_5.x86_64 (base)
mysql = 5.1.73-3.el6_5
устанавливаем пакет mysql-devel из репозитория remi:
yum --enablerepo=remi,remi-test install mysql-devel
Создаем папку, где будут находиться бинарные файлы:
mkdir /opt/php-5.2.17
Создаем папку для загрузки исходников и переходим в нее:
mkdir -p /usr/src/php/ && cd /usr/src/php/
Скачиваем архив с исходниками php 5.2.17:
wget -c -t0 http://wb0.ru/articles/img/php-5.2.17.tar.gz
Распаковываем архив:
tar zxf php-5.2.17.tar.gz
Переходим в папку с исходниками:
cd /usr/src/php/php-5.2.17/
Скачиваем и применяем патч безопасности:
wget http://wb0.ru/articles/img/php52-backports-20130717.patch
patch -p1 < php52-backports-20130717.patch
Конфигурируем PHP 5.2.17 с архитектурой amd64:
./configure \
--prefix=/opt/php-5.2.17 \
--with-config-file-path=/opt/php-5.2.17 \
--with-libdir=lib64 \
--with-mysql \
--with-mysqli \
--with-sqlite=shared \
--with-curl \
--with-gd \
--with-openssl \
--with-pdo-mysql=shared --with-pdo-sqlite=shared \
--with-mcrypt \
--with-pear \
--with-pic \
--with-jpeg-dir \
--with-png-dir \
--with-ttf \
--with-freetype-dir \
--with-xmlrpc \
--with-xpm-dir \
--with-zlib \
--enable-bcmath \
--enable-calendar \
--enable-cli \
--enable-discard-path \
--enable-fastcgi \
--enable-ftp \
--enable-force-cgi-redirect \
--enable-gd-native-ttf \
--enable-libxml \
--enable-mbstring \
--enable-pdo=shared \
--enable-soap \
--enable-sockets \
--enable-session \
--enable-zip \
--enable-zend-multibyte
Для i386:
--with-libdir=lib \
Параметр =shared указывает на необходимость компилирования отдельной разделяемой (динамической) библиотеки (shared libraries) с расширением .so, которую потом можно подключить в php.ini.
Компилируем и устанавливаем:
make && make install
Видим, что и куда установилось:
Wrote PEAR system config file at: /opt/php-5.2.17/etc/pear.conf
You may want to add: /opt/php-5.2.17/lib/php to your php.ini include_path
Installing PDO headers: /opt/php-5.2.17/include/php/ext/pdo/
Копируем php.ini:
cp /usr/src/php/php-5.2.17/php.ini-recommended /opt/php-5.2.17/lib/php.ini
Проверяем версию установленного интерпретатора PHP:
/opt/php-5.2.17/bin/php-cgi -v
Видим:
PHP 5.2.17 (cli) (built: Mar 20 2013 10:32:00)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
Создаем файлы шаблонов.
Первый файл:
vi /usr/local/vesta/data/templates/web/httpd/phpfcgid52.sh
Содержимое:
#!/bin/shell
# Adding php wrapper
user="$1"
domain="$2"
ip="$3"
home_dir="$4"
docroot="$5"
wrapper_script="#!/bin/sh
export PHPRC=/opt/php-5.2.17/lib/
export PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_CHILDREN=20
exec /opt/php-5.2.17/bin/php-cgi
"
wrapper_file="$home_dir/$user/web/$domain/cgi-bin/fcgi-starter"
echo "$wrapper_script" > $wrapper_file
chown $user:$user $wrapper_file
chmod -f 751 $wrapper_file
exit 0
Второй файл:
vi /usr/local/vesta/data/templates/web/httpd/phpfcgid52.tpl
Содержимое:
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ServerAdmin %email%
DocumentRoot %docroot%
ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
SuexecUserGroup %user% %group%
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %docroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
<Files *.php>
SetHandler fcgid-script
</Files>
FCGIWrapper %home%/%user%/web/%domain%/cgi-bin/fcgi-starter .php
</Directory>
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
Include %home%/%user%/conf/web/%web_system%.%domain%.conf*
</VirtualHost>
Третий файл:
vi /usr/local/vesta/data/templates/web/httpd/phpfcgid52.stpl
Содержимое:
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
%alias_string%
ServerAdmin %email%
DocumentRoot %sdocroot%
ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
SuexecUserGroup %user% %group%
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %sdocroot%>
SSLRequireSSL
AllowOverride All
Options +Includes -Indexes +ExecCGI
<Files *.php>
SetHandler fcgid-script
</Files>
FCGIWrapper %home%/%user%/web/%domain%/cgi-bin/fcgi-starter .php
</Directory>
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
php_admin_value open_basedir none
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
Include %home%/%user%/conf/web/s%web_system%.%domain%.conf*
</VirtualHost>
Делаем созданные файлы исполняемыми:
chmod +x /usr/local/vesta/data/templates/web/httpd/phpfcgid52.sh && \
chmod +x /usr/local/vesta/data/templates/web/httpd/phpfcgid52.tpl && \
chmod +x /usr/local/vesta/data/templates/web/httpd/phpfcgid52.stpl
Перезапускаем Apache:
service httpd restart
Входим в VestaCP и переходим в раздел "Пакеты" (https://xxx.xxx.xxx.xxx:8083/list/package/).
Добавляем новый пакет php52 с шаблоном phpfcgid52.
При создании нового пользователя или редактировании существующего указываем созданный пакет php52.
Если, выбрав пакет php52, при заходе на сайт выдается ошибка сервера, меняем в phpfcgid52.tpl
<Directory %docroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
<Files *.php>
SetHandler fcgid-script
</Files>
FCGIWrapper %home%/%user%/web/%domain%/cgi-bin/fcgi-starter .php
</Directory>
на
<Directory %docroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
<FilesMatch "\.php">
SetHandler application/x-httpd-php5
</FilesMatch>
ScriptAlias /php52-cgi %home%/%user%/web/%domain%/cgi-bin/fcgi-starter
Action application/x-httpd-php5 /php52-cgi
AddHandler application/x-httpd-php5 .php
|