Несколько версий PHP под одним Apache на Windows

в 11:27, , рубрики: Apache, php, windows, windows server 2012 r2, разработка, разработка под windows, разработка сайтов, хостинг

Некоторое время назад мне потребовалось иметь на одном веб-сервере разные версии PHP. Все мануалы, что удалось найти беглым взглядом, подразумевали linux-дистрибутивы, на которые мне не хотелось переносить выношенную в муках конфигурацию apache, установленную виртуальной Windows Server 2012 R2 (x64). Результат моего удавшегося эксперимента представляю на ваш суд.

Первым делом нужно определиться, какой разрядности (х86 или х64) мы хотим от нашего веб-сервера. С недавних пор, а именно — версии PHP5.5, разработчик стал выпускать стабильные сборки под х64, тогда как ранее подобные билды выпускались энтузиастами. Для наибольшего возможного разброса версий PHP и для наглядного примера остановимся на х86 сборке. Далее я буду указывать версии ПО, заработавшие в моём конкретном случае.

1. Скачиваем Apache 2.4.10 Win32 VC11 на www.apachelounge.com/download/
ВНИМАНИЕ! Необходимо иметь на компьютере установленную Visual C++ Redistributable for Visual Studio 2012
Выбор версии обусловлен тем, что сборки VC11 не имеют (согласно отзывам) проблем с производительностью как у VC9, VC10, и могут запускать модули, написанные под оные. Старые версии апача не тестировались.

Установка и базовая настройка веб-сервера разжевана и без меня, поэтому её опускаем.

2. Берём бинарники PHP, windows.php.net/download/
Нас интересуют x86 Thread Safe версии. Берем все стабильные версии, которые вас интересуют. Лично у меня заработали начиная с 5.3 до 5.6. Архивные версии так же работают.
Для удобства раскладываем всё по соседним папкам:
image

3. Лезем в конфиги apache.

3.1.1 httpd.conf — Выключаем PHP, если он настроен как модуль к Apache:

#LoadModule php5_module "D:/php/php5.6/php5apache2_4.dll"
#AddType application/x-httpd-php .php
#PHPIniDir "D:/php/php5.6/"

3.1.2 httpd.conf — Включаем модуль FastCGI

LoadModule fcgid_module modules/mod_fcgid.so

Включаем использование его конфигурации:

Include conf/extra/httpd-fcgid.conf

3.2 conf/extra/httpd-fcgid.conf — Оставляем стандартные настройки, кроме первого абзаца:

# Fast CGI module Settings (PHP 5.3, 5.4)

#	FcgidInitialEnv PHPRC "C:\php"
#	FcgidInitialEnv PATH "C:\php;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;"
	FcgidInitialEnv SystemRoot "C:\Windows"
	FcgidInitialEnv SystemDrive "C:"
	FcgidInitialEnv TEMP "C:\WINDOWS\TEMP"
	FcgidInitialEnv TMP "C:\WINDOWS\TEMP"
	FcgidInitialEnv windir "C:\WINDOWS"

3.3 conf/extra/httpd-vhost.conf — Прописываем для каждого виртуального хоста настройки (выделено полужирным):

<VirtualHost *:80>
    DocumentRoot "D:/http/web.local/"
    ServerName web.local
ErrorLog "logs/web.local-error.log"
CustomLog "logs/web.local-access.log" common

<b>FcgidInitialEnv PHPRC "D:\phpphp5.6"</b>
<b>FcgidInitialEnv PATH "D:\phpphp5.6;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;"</b>

<Directory "D:/http/web.local/">
<b>AddHandler fcgid-script .php</b>
    Options -Indexes +FollowSymLinks <b>+ExecCGI</b>
<b>FcgidWrapper "D:/php/php5.6/php-cgi.exe" .php</b>
	  <b>Require all granted</b>
</Directory>
</VirtualHost>

Если всё раскладывать по соседним папкам как у меня, то в конфиге виртуального хоста меняем только последние цифры в пути PHP.

Как итог: получаем разные версии PHP на разных виртуальных хостах на одном сервисе Apache.

Автор: nikerossxp

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js