Я не проггер, потому не могу сказать, какие там отличия у php 5.2 и php 5.3, но они есть и иногда возникает необходимость девелопить под ту или другую версии. Сейчас я поведаю вам, как это реализовать на одной машине с Gentoo Linux.
Для начала устанавливаем апач и оба пхп. Там надо немного поколдовать с USE - у меня уже не сохранился лог моих мучений) но у вас всё получится - я уверен: оно, как правило, пишет чего ему не хватает и остается только подключить это.
Для того чтобы подключить два mod_php к разным apache на разных IP нужно две разных конфигурации для apache (да и два разных запущенных apache). В Gentoo, к счастью, это делается очень просто. Скрипт запущенный из /etc/init.d/ будет искать себе начальную конфигурацию в /etc/conf.d/ согласно своему префиксу: скрипт /etc/init.d/apache2 получит конфигурацию из /etc/conf.d/apache2, /etc/init.d/apache2.php52 из /etc/conf.d/apache2.php52, /etc/init.d/apache2.php53 из /etc/conf.d/apache2.php53. Таким образом просто делая линки на оригинальный скрипт из /etc/init.d мы можем передавать разные параметры программе. В нашем случае это будут разные Define директивы апачу (через флаг -D). Это позволит использовать один конфигурационный файл разделив нужные нам опции директивами IfDefine.
Разделять директивами следует те ресурсы, которые не могут совместно использоваться разными процессами apache, например лог-файлы, pid-файлы. Или разную функциональность, например разные версии mod_php или разные сертификаты SSL.
Настройка всего этого хозяйства.
Для начала создаем себе 2-й IP адрес:
ifconfig eth0:0 10.10.7.249
Для того чтобы меньше менять в конфигурации примем стандартные определения - для того чтобы грузится с PHP 5.2 апачу нужно передать -D PHP52, а для PHP 5.3 соотвественно -D PHP53. Добавим к этим двум еще и определение -D TWO_PHP, что позволит нам иметь три разных конфигурации:
Соответственно делаем два линка на стартовый скрипт:
ln -s apache2 /etc/init.d/apache2.php52
ln -s apache2 /etc/init.d/apache2.php53
Копируем и изменяем настройки в /etc/conf.d:
cp /etc/conf.d/apache2{,.php52}
cp /etc/conf.d/apache2{,.php53}
в apache2.php52:
APACHE2_OPTS="-D PHP52 -D TWO_PHP ..."
в apache2.php53:
APACHE2_OPTS="-D PHP53 -D TWO_PHP ..."
Также в этих двух файлах меняем директорию PIDFILE.
httpd.conf от стандартного отличается следующим:
<IfDefine !TWO_PHP>
Listen 80
</IfDefine>
<IfDefine TWO_PHP>
<IfDefine PHP52>
Listen 10.10.7.7:80
</IfDefine>
<IfDefine PHP53>
Listen 10.10.7.249:80
</IfDefine>
</IfDefine>
Include /etc/apache2/vhosts.d/*.conf
Понятно, что в listen указываем свои IP, а Include нужен для поддержки виртуал хостов.
vhosts.confбудет таким:
<VirtualHost site1.example.int>
ServerName site1.example.int
DocumentRoot "/var/www/php5.2/"
<Directory "/var/www/php5.2">
Options Indexes FollowSymLinks
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost site2.example.int>
ServerName site2.example.int
DocumentRoot "/var/www/php5.3/"
<Directory "/var/www/php5.3">
Options Indexes FollowSymLinks
AllowOverride All
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Также надо подправить файлик /etc/httpd/modules.d/70_mod_php5.conf:
IfDefine PHP5> # Load the module first
<IfModule !mod_php5.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
# Set it to handle the files
<IfModule mod_mime.c>
AddHandler application/x-httpd-php .php .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</IfModule>
DirectoryIndex index.php index.phtml
</IfDefine>
<IfDefine TWO_PHP>
<IfDefine PHP52>
LoadModule php5_module /usr/lib/php5.2/apache2/libphp5.so
</IfDefine>
<IfDefine PHP53>
LoadModule php5_module /usr/lib/php5.3/apache2/libphp5.so
</IfDefine>
<IfModule mod_mime.c>
AddHandler application/x-httpd-php .php .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</IfModule>
</IfDefine>
Также, если не настроен ДНС у вас, то не забываем вписать в /etc/hosts наши домены:
10.10.7.7 site1.example.int
10.10.7.249 site2.example.int
Вроде бы всё... Запускаем:
/etc/init.d/apache2.php52 start
Проверяем 1й IP (пофиг проверяем, даже если ругается апач что не стартует - у меня ругался, но работал :) ).
Затем удаляем PID файл апача:
rm /var/run/apache2
Магия запуска двух апачей с разными PID файлами мне пока еще не доступна, потому так по-китайски делаем :)
/etc/init.d/apache2.php53 start
Всё должно работать теперь.
Кстати, не забудьте в директории /var/www/php5.3 и /var/www/php5.2 для проверки кинуть файлик index.php с содержимым:
<? php
phpinfo();
/>
Всем спасибо за внимание :)
Для начала устанавливаем апач и оба пхп. Там надо немного поколдовать с USE - у меня уже не сохранился лог моих мучений) но у вас всё получится - я уверен: оно, как правило, пишет чего ему не хватает и остается только подключить это.
Для того чтобы подключить два mod_php к разным apache на разных IP нужно две разных конфигурации для apache (да и два разных запущенных apache). В Gentoo, к счастью, это делается очень просто. Скрипт запущенный из /etc/init.d/ будет искать себе начальную конфигурацию в /etc/conf.d/ согласно своему префиксу: скрипт /etc/init.d/apache2 получит конфигурацию из /etc/conf.d/apache2, /etc/init.d/apache2.php52 из /etc/conf.d/apache2.php52, /etc/init.d/apache2.php53 из /etc/conf.d/apache2.php53. Таким образом просто делая линки на оригинальный скрипт из /etc/init.d мы можем передавать разные параметры программе. В нашем случае это будут разные Define директивы апачу (через флаг -D). Это позволит использовать один конфигурационный файл разделив нужные нам опции директивами IfDefine.
Разделять директивами следует те ресурсы, которые не могут совместно использоваться разными процессами apache, например лог-файлы, pid-файлы. Или разную функциональность, например разные версии mod_php или разные сертификаты SSL.
Настройка всего этого хозяйства.
Для начала создаем себе 2-й IP адрес:
ifconfig eth0:0 10.10.7.249
Для того чтобы меньше менять в конфигурации примем стандартные определения - для того чтобы грузится с PHP 5.2 апачу нужно передать -D PHP52, а для PHP 5.3 соотвественно -D PHP53. Добавим к этим двум еще и определение -D TWO_PHP, что позволит нам иметь три разных конфигурации:
- если неопределено TWO_PHP (что есть по-умолчанию), то будем иметь апач настроенный по-умолчанию (удобно для тестирования и отладки глюков других конфигураций)
если определено TWO_PHP & PHP52 - получаем апач с PHP 5.2
если определено TWO_PHP & PHP53 - получаем апач с PHP 5.3
Соответственно делаем два линка на стартовый скрипт:
ln -s apache2 /etc/init.d/apache2.php52
ln -s apache2 /etc/init.d/apache2.php53
Копируем и изменяем настройки в /etc/conf.d:
cp /etc/conf.d/apache2{,.php52}
cp /etc/conf.d/apache2{,.php53}
в apache2.php52:
APACHE2_OPTS="-D PHP52 -D TWO_PHP ..."
в apache2.php53:
APACHE2_OPTS="-D PHP53 -D TWO_PHP ..."
Также в этих двух файлах меняем директорию PIDFILE.
httpd.conf от стандартного отличается следующим:
<IfDefine !TWO_PHP>
Listen 80
</IfDefine>
<IfDefine TWO_PHP>
<IfDefine PHP52>
Listen 10.10.7.7:80
</IfDefine>
<IfDefine PHP53>
Listen 10.10.7.249:80
</IfDefine>
</IfDefine>
Include /etc/apache2/vhosts.d/*.conf
Понятно, что в listen указываем свои IP, а Include нужен для поддержки виртуал хостов.
vhosts.confбудет таким:
<VirtualHost site1.example.int>
ServerName site1.example.int
DocumentRoot "/var/www/php5.2/"
<Directory "/var/www/php5.2">
Options Indexes FollowSymLinks
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost site2.example.int>
ServerName site2.example.int
DocumentRoot "/var/www/php5.3/"
<Directory "/var/www/php5.3">
Options Indexes FollowSymLinks
AllowOverride All
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Также надо подправить файлик /etc/httpd/modules.d/70_mod_php5.conf:
IfDefine PHP5> # Load the module first
<IfModule !mod_php5.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
# Set it to handle the files
<IfModule mod_mime.c>
AddHandler application/x-httpd-php .php .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</IfModule>
DirectoryIndex index.php index.phtml
</IfDefine>
<IfDefine TWO_PHP>
<IfDefine PHP52>
LoadModule php5_module /usr/lib/php5.2/apache2/libphp5.so
</IfDefine>
<IfDefine PHP53>
LoadModule php5_module /usr/lib/php5.3/apache2/libphp5.so
</IfDefine>
<IfModule mod_mime.c>
AddHandler application/x-httpd-php .php .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</IfModule>
</IfDefine>
Также, если не настроен ДНС у вас, то не забываем вписать в /etc/hosts наши домены:
10.10.7.7 site1.example.int
10.10.7.249 site2.example.int
Вроде бы всё... Запускаем:
/etc/init.d/apache2.php52 start
Проверяем 1й IP (пофиг проверяем, даже если ругается апач что не стартует - у меня ругался, но работал :) ).
Затем удаляем PID файл апача:
rm /var/run/apache2
Магия запуска двух апачей с разными PID файлами мне пока еще не доступна, потому так по-китайски делаем :)
/etc/init.d/apache2.php53 start
Всё должно работать теперь.
Кстати, не забудьте в директории /var/www/php5.3 и /var/www/php5.2 для проверки кинуть файлик index.php с содержимым:
<? php
phpinfo();
/>
Всем спасибо за внимание :)
Комментариев нет:
Отправить комментарий