Страница 1 из 2

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

Добавлено: 02 сен 2013, 12:40
Ganster41
Я уже как-то поднимал такой вопрос, т.к. у нас сейчас проекты постепенно переводятся с 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. Более красивого способа, чем принудительное убийство процессов я не нашел, так что если вдруг ваш скрипт будет что-то писать в базу в момент остановки сервера - можете потерять данные! Будьте внимательны!

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

Добавлено: 21 авг 2024, 08:36
lp85d
Ну а в версии 6.0.0 как это настроить?
E:\OSPanel\home\site1.ru\.osp\project.ini
[site1.ru]

php_engine        = PHP-7.2
ip	=	192.168.0.211
E:\OSPanel\home\site2.ru\.osp\project.ini
[site2.ru]

php_engine        = PHP-8.3
ip	=	192.168.0.211
Так не работает

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

Добавлено: 21 авг 2024, 08:46
lp85d
Разобрался
Все остальные сайты после первого не требуют ip

E:\OSPanel\home\site1.ru\.osp\project.ini
[site1.ru]

php_engine        = PHP-7.2
ip	=	192.168.0.211
E:\OSPanel\home\site2.ru\.osp\project.ini
[site2.ru]

php_engine        = PHP-8.3
Теперь работает!

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

Добавлено: 21 авг 2024, 08:51
lp85d
А вот из внешней сети в такой конфигурации доступен только первый домен
И как тогда настраивать?

Выходит так что работает только один сайт либо site1.ru когда модуль PHP-7.2 включен, а модуль PHP-8.3 выключен либо site2.ru когда модуль PHP-8.3 включен, а модуль PHP-7.2 выключен

E:\OSPanel\home\site1.ru\.osp\project.ini
[site1.ru]

php_engine        = PHP-7.2
ip	=	192.168.0.211
ssl_cert_file = E:\\Certbot\\archive\\site1.ru\\fullchain1.pem
ssl_key_file = E:\\Certbot\\archive\\site1.ru\\privkey1.pem
E:\OSPanel\home\site2.ru\.osp\project.ini
[site2.ru]

php_engine = PHP-8.3
ip	=	192.168.0.211
ssl_cert_file = E:\\Certbot\\archive\\site2.ru\\fullchain.pem
ssl_key_file = E:\\Certbot\\archive\\site2.ru\\privkey.pem
C:\Windows\System32\drivers\etc\hosts
127.127.126.55 nginx-1.26
127.127.126.55 nginx-1.26.local
127.127.126.25 mysql-5.7
127.127.126.25 mysql-5.7.local
192.168.0.211 site1.ru
192.168.0.211 www.site1.ru
127.127.126.28 php-7.2
127.127.126.28 php-7.2.local
127.127.127.127 ospanel
127.127.127.127 ospanel.local

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

Добавлено: 21 авг 2024, 10:47
lp85d
Вывод лога
E:\OSPanel\logs\PHP-8.3.log
--------------------------------------------------------------------------------------------
[2024-08-21 10:37:34] Running PHP-8.3 (default)
--------------------------------------------------------------------------------------------
(OS 10048)Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт).  : AH00072: make_sock: could not bind to address 192.168.0.211:443
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
chatgpt предлагал создать файлы. но как видим из лога PHP-8.3.log это не помогло
E:\OSPanel\home\site1.ru\.osp\nginx\site1.ru.conf
server {
    listen 80;
    server_name site1.ru www.site1.ru;

    root E:/OSPanel/home/site1.ru;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9072;  # Используем PHP 7.2
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    listen 443 ssl; # Обслуживание через SSL
    ssl_certificate E:/Certbot/archive/site1.ru/fullchain1.pem;
    ssl_certificate_key E:/Certbot/archive/site1.ru/privkey1.pem;
}
E:\OSPanel\home\site2.ru\.osp\nginx\site2.ru.conf
server {
    listen 80;
    server_name site2.ru www.site2.ru;

    root E:/OSPanel/home/site2.ru;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9083;  # Используем PHP 8.3
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    listen 443 ssl; # Обслуживание через SSL
    ssl_certificate E:/Certbot/archive/site2.ru/fullchain.pem;
    ssl_certificate_key E:/Certbot/archive/site2.ru/privkey.pem;
}

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

Добавлено: 21 авг 2024, 11:10
lp85d
Короче проблема такая:
В локальной сети оба модуля работают параллельно
Но вот из внешней сети может работать только один
И это никак не решается?
Изображение

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

Добавлено: 21 авг 2024, 11:50
lp85d
Печально что удалил файл open_server_panel_6_0_0_setup.exe,
а отдельно скачать модуль PHP-8.3-FCGI не получается
OSPanel/OpenServerPanel/tree/main/modules/PHP-8.3-FCGI/
Придётся качать весь пакет целиком

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

Добавлено: 21 авг 2024, 17:28
lp85d
И так скачался файл установки и приступил к распаковке
Программа предлагала заменить файлы
E:\OSPanel\user\browscap\lite_php_browscap.ini
E:\OSPanel\config\PHP-7.2-FCGI\default\settings.ini
E:\OSPanel\config\PHP-7.2-FCGI\default\templates\php.ini
E:\OSPanel\config\PHP-8.3-FCGI\default\settings.ini
E:\OSPanel\config\PHP-8.3-FCGI\default\templates\php.ini
Но я отказался от замены данных файлов

Изображение

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

Добавлено: 21 авг 2024, 18:24
DelphinPRO
lp85d писал(а): 21 авг 2024, 08:51 А вот из внешней сети в такой конфигурации доступен только первый домен
И как тогда настраивать?
В следующей версии вроде что-то планировалось с этим сделать. Деталей не помню.

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

Добавлено: 21 авг 2024, 19:05
lp85d
DelphinPRO писал(а): 21 авг 2024, 18:24
lp85d писал(а): 21 авг 2024, 08:51 А вот из внешней сети в такой конфигурации доступен только первый домен
И как тогда настраивать?
В следующей версии вроде что-то планировалось с этим сделать. Деталей не помню.
Вы не поверите, весь день убил на это и получилось методом тыка настроить!
ip адрес на всех доменах с разыми PHP FCGI один и тот же выставил
Затем создал файлы
"E:\OSPanel\home\site1.ru\.osp\apache\site1.ru.conf"
"E:\OSPanel\home\site2.ru\.osp\apache\site2.ru.conf"
"E:\OSPanel\home\site1.ru\.osp\nginx\site1.ru.conf"
"E:\OSPanel\home\site2.ru\.osp\nginx\site2.ru.conf"
Внёс в них волшебных конфигураций
ServerName
DocumentRoot
SSLEngine
SSLCertificateFile
SSLCertificateKeyFile
viewtopic.php?p=32642#p32642