четверг, 12 апреля 2012 г.

php 5.2 и php 5.3 на одном сервере (FreeBSD)

Для обеспечения работоспособности php 5.2 и php 5.3 на одном сервере можно сделать следующее:

1. убедится, что php 5.2 и его расширения установлены из портов php52 и php52-extensions соответственно.

2. make -C /usr/ports/lang/php5/ PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 PHP_AUTOCONF=/usr/local/bin/autoconf-2.68 PHP_AUTOHEADER=/usr/local/bin/autoheader-2.68 install

3. make -C /usr/ports/lang/php5-extensions/ PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 PHP_AUTOCONF=/usr/local/bin/autoconf-2.68 PHP_AUTOHEADER=/usr/local/bin/autoheader-2.68 install

на этом шаге могут возникнуть проблемы с портами, которые не были еще установлены в систему и поставились по зависимостям модулей: из-за указания PREFIX они тоже поставятся в /usr/local/php53, но нам этого не надо, поэтому:

pkg_delete <проблемный порт>

make -C /usr/ports/<категория>/<проблемный порт> install

и повторяем пункт 3.



Настройка Apache

php 5.2 оставлен модулем, а php 5.3 будет работать через cgi.

1. добавляем:

ScriptAlias /php53/ “/usr/local/php53/bin/”

<Directory “/usr/local/php53/bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

2. для виртуальных хостов, которым требуется php 5.3 разрешаем переписывать FileInfo:

AllowOverride FileInfo

3. в документруте сайта в .htaccess надо добавить:

AddHandler php53 .php
Action php53 /cgi-bin/php53-cgi

4. копируем:

cp /usr/local/php53/bin/php-cgi ~<user>/cgi-bin/php53-cgi

Все пункты, кроме п.1, необходимы если используется suexec. Если же suexec не используется, то берем пп.1, 2, а 3 будет таким:

AddHandler php53 .php
Action php53 /php53/php-cgi



Примечание

В режиме cgi php не читает php.ini из домашнего каталога пользователя. Есть два способа решения:

1. сделать линк на пользовательский php.ini в каталоге cgi-bin:

cd ~/cgi-bin

ln -s ../php.ini

2. в php 5.3 появилась поддержка изменения настроек для каждого отдельного каталога путем размещения в них файла .user.ini