Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 022 698 раз!

Форум

Добро пожаловать, Гость!

Запуск нескольких версий PHP на OpenServer

Советы и рекомендации, полезные инструкции, обмен опытом
Ganster41
Сообщения: 66
C нами: 4 года 9 мес

Непрочитанное сообщение Ganster41 » 02 сен 2013, 12:40

Я уже как-то поднимал такой вопрос, т.к. у нас сейчас проекты постепенно переводятся с 5.2 на 5.4+, но старые периодически тоже приходить править, и потом конечно же тестировать...
Погуглив, пришел к выводу, что для старых проектов можно настроить запуск старых версий PHP через FastCGI. На вопросы о том, как это сделать, мне тут отвечали что это сложно, и зачем вообще нужно... В общем сделал сам, и делюсь с другими. Может кому тоже пригодится.

Описание содержимого архива:
domains - Здесь можно найти файлик Apache-2.4.4_vhost.conf, который является копией такого-же шаблона из папки userdata/config, но с изменениями, говорящими апачу о том, что для обработки PHP нужно использовать FastCGI handler. Файл этот положить в корневую папку домена, как и указано в документации OpenServer'а.

modules\http\Apache-2.4.4\modules - Тут собственно лежит модуль FastCGI для Apache. Достаточно просто распаковать его в папку modules вашего Apache;

modules\php\PHP-5.2.17 - Тут я ложу сгенерированный файл php.ini для PHP, который будет запускаться через FastCGI. К сожалению "шаблонизатор" OpenServer'а тут использовать нельзя, ноэтому только так. Проще всего его получить, временно переключив в настройках версию PHP на 5.2(или какую там вы настраиваете), и запустить сервер. Нужный нам файл будет в папке userdata\temp\config. Просто копируем его в папку PHP.

userdata\config - Сюда я положил пример основного конфига Apache, с подключением и настройкой модуля FastCGI. Если вы использовали оригинальный конфиг без изменений, то можно просто заменить его моим. Для тех, кто все-таки что-то менял, опишу изменения позже.

userdata\post_stop.tpl.bat - Скрипт убивающий процессы cgi-демона PHP при остановке сервера. Без него их при перезапуске наплодится тьма :)

Вроде бы все. Спрашиваем, если чего не понятно.

Добавлено спустя 24 минуты 50 секунд:
Ну и собственно сами изменения, если вносить вручную:

Apache-x.x.x_server.conf
Подключаем модуль FastCGI строчкой(просто добавить после других LoadModule...)
LoadModule fcgid_module modules/mod_fcgid.so


И куда-нибудь в конец файла добавляем собственно настройки модуля:
<IfModule mod_fcgid.c>
# Set PHP_FCGI_MAX_REQUESTS to greater than or equal to FcgidMaxRequestsPerProcess
# to prevent php-cgi process from exiting before all requests completed
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
# Maximum requests a process should handle before it is terminated
FcgidMaxRequestsPerProcess 1000
# Maximum number of PHP processes
FcgidMaxProcesses 15
# Number of seconds of idle time before a php-cgi process is terminated
FcgidIOTimeout 120
FcgidIdleTimeout 120
</IfModule>


Ложим файл mod_fcgid.so в папку modules\http\Apache-х.х.х\modules
На этом правка конфигов, имеющих отношение к самому OpenServer завершена.

Настраиваем нужный домен, для работы со своей версией PHP:
Копируем файл userdata\config\Apache-х.х.х_vhost.conf в корневую папку нужного домена, и добавляем в обе секции VirtualHost такие вот строки:
Options +ExecCGI
  FcgidInitialEnv PHPRC "%sprogdir%/modules/php/PHP-5.2.17/"
  AddHandler fcgid-script .php
  FcgidWrapper "%sprogdir%/modules/php/PHP-5.2.17/php-cgi.exe" .php

Переменная FcgidInitialEnv должна содержать путь к корневой папке нашего php. Там же PHP будет искать php.ini, который предварительно туда нужно положить. Проще всего его получить, временно переключив в настройках версию PHP на 5.2(или какую там вы настраиваете), и запустить сервер. Нужный нам файл будет в папке userdata\temp\config.
FcgidWrapper - Путь к файлу php-cgi.exe нашей версии PHP.

Ну и добавляем в файл userdata\post_stop.tpl.bat (или создаем его, если не создавали ранее) вот это:
taskkill /F /IM php-cgi.exe

Как я уже писал, это нужно для того, чтобы при остановке сервера, убивались процессы CGI-демона PHP. Более красивого способа, чем принудительное убийство процессов я не нашел, так что если вдруг ваш скрипт будет что-то писать в базу в момент остановки сервера - можете потерять данные! Будьте внимательны!
Вложения
OS_5.2_cgi.zip
FastCGI php 5.2 module
(90.93 КБ) 130 скачиваний

Вернуться в «Полезные советы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость