Первым делом нужно определиться, какой разрядности (х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. Архивные версии так же работают.
Для удобства раскладываем всё по соседним папкам:
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 || FcgidInitialEnv PHPRC "D:\\php\php5.6" || || FcgidInitialEnv PATH "D:\\php\php5.6;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;" || <Directory "D:/http/web.local/"> || AddHandler fcgid-script .php || Options -Indexes +FollowSymLinks || +ExecCGI || || FcgidWrapper "D:/php/php5.6/php-cgi.exe" .php || || Require all granted || </Directory> </VirtualHost>
Если всё раскладывать по соседним папкам как у меня, то в конфиге виртуального хоста меняем только последние цифры в пути PHP.
Как итог: получаем разные версии PHP на разных виртуальных хостах на одном сервисе Apache.