И так, структура директорий:
C:\Server\Apache24
C:\Server\PHP55
C:\Server\PHP56
C:\Server\PHP57
C:\Server\home тут директории с сайтами
В C:\Server\Apache24\conf\ копируем/вставляем 3 копии httpd.conf и переименовываем их в httpd55.conf, httpd56.conf и httpd7.conf, каждый файл конфигурации для своей версии PHP соответственно. Я сначала сконфигурировал один конфиг апача, затем после его копипасты на 3 файла подключил в каждом файле:
#конфиг httpd55.conf
LoadModule php5_module "C:/Server/PHP55/php5apache2_4.dll"
<IfModule php5_module>
AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP55"
</IfModule>
#конфиг httpd56.conf
LoadModule php5_module "C:/Server/PHP56/php5apache2_4.dll"
<IfModule php5_module>
AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP56"
</IfModule>
#конфиг httpd7.conf
LoadModule php7_module "C:/Server/PHP7/php7apache2_4.dll"
<IfModule php7_module>
AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP7"
</IfModule>
Далее через консоль создаем 3 сервиса Windows для каждой версии PHP, указывая какой конфиг будет использовать апач:
C:\Server\Apache24\bin\httpd.exe -k install -n "Apache PHP5.5" -f "C:\Server\Apache24\conf\httpd55.conf"
C:\Server\Apache24\bin\httpd.exe -k install -n "Apache PHP5.6" -f "C:\Server\Apache24\conf\httpd56.conf"
C:\Server\Apache24\bin\httpd.exe -k install -n "Apache PHP7" -f "C:\Server\Apache24\conf\httpd7.conf"
Не забудьте оставить автозапуск только у одной службы Апача. У меня стоит только у PHP5.6, на PHP5.5 и PHP7 переключаюсь по необходимости.
Результат:
- можно конфигурировать каждый Apache сервер под свой PHP
- для смены версии PHP достаточно остановить один сервер и запустить другой из ApacheMonitor
P.S. За этот костыль мне даже премию выдали :)
Комментарии (30)
lnroma
10.10.2016 17:53+2туториал как сделать 3 версии php для linux:
1. Берём gentoo
2. Ставим нужные версии
3. И через eselct меняем версию
Всё же windows для меня довольно сложная штука…saboteur_kiev
10.10.2016 17:56+1А если у меня убунту?
/sarkazm/ Какой же этот линукс неудобный. Захотел 3 версии PHP — надо всю систему переустанавливать.happyproff
11.10.2016 08:37+1Всё просто:
https://launchpad.net/~ondrej/+archive/ubuntu/php/ — один реп для 5.5, 5.6, 7.0, 7.1. Все версии можно установить в систему одновременно. Выбирать версию PHP для консоли можно через update-alternatives, для FPM просто разные порты, а дальше в nginx указываем порт нужного FPM.
$ update-alternatives --config php
There are 3 choices for the alternative php (providing /usr/bin/php).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/php7.1 71 auto mode
1 /usr/bin/php5.6 56 manual mode
2 /usr/bin/php7.0 70 manual mode
3 /usr/bin/php7.1 71 manual mode
thesun2003
11.10.2016 09:04Странно, что никто не упомянул одну простую реализацию как docker контейнер. Берешь N контейнеров в котором отличается только PHP и монтируешь туда одну и ту же папку с сайтом. И вуаля — у тебя три одинаковых контейнера с различными версиями PHP.
Накладных расходов почти никаких. Работает независимо от ОС.
andrium
11.10.2016 09:04Как сделано у меня:
./apache < — сюда распаковываем Apache HTTPd
./apache/conf
./apache/conf/http.conf < — сюда инклудим конфу PHP
./apache/conf/php5.conf
./apache/conf/php7.conf
./apache/conf/php.conf [символическая ссылка на необходимую версию]
./php53
./php54
./php55
./php56
./php70
./php [символическая ссылка на необходимую версию]
Теперь пишем bat'ники…
php56.bat
echo off
c:\a\apache\bin\httpd -k stop -n ApacheHTTPd
c:\a\apache\bin\httpd -k uninstall -n ApacheHTTPd
del c:\a\apache\conf\php.conf
rd c:\a\php
mklink /d c:\a\php c:\a\php56
mklink c:\a\apache\conf\php.conf c:\a\apache\conf\php5.conf
c:\a\apache\bin\httpd -k install -n ApacheHTTPd
c:\a\apache\bin\httpd -k start -n ApacheHTTPd
php70.bat
echo off
c:\a\apache\bin\httpd -k stop -n ApacheHTTPd
c:\a\apache\bin\httpd -k uninstall -n ApacheHTTPd
del c:\a\apache\conf\php.conf
rd c:\a\php
mklink /d c:\a\php c:\a\php70
mklink c:\a\apache\conf\php.conf c:\a\apache\conf\php7.conf
c:\a\apache\bin\httpd -k install -n ApacheHTTPd
c:\a\apache\bin\httpd -k start -n ApacheHTTPd
LeamasRein
11.10.2016 09:04Не хочу разводить холивар, но понять не могу, у вас 250 (!) сайтов на PHP (под разными версиями??) в продакшене под Windows на апаче живут?
infolex
11.10.2016 09:07Нет, это девелоперская виндовая машина в офисе. Продакшены у клиентов, версия интерпретатора в ТЗ
saboteur_kiev
11.10.2016 11:45Чем плохо запустить несколько апачей на разных портах, которые будут смотреть в одну и туже папку с большим количеством сайтов?
Разработчикам сказать на каком порту какая версия PHP, и они не только смогут ходить на правильный, но вдобавок, может быть еще и проверять совместимость с другими версиями, чтобы везде работало.
m8rge
11.10.2016 09:04Наркомания. Нужно скриптик запустить на локали — любой пхп подойдет. Нужно проверить кусок кода в определенной версии — https://3v4l.org. Нужно разрабатывать проект под определенную версию — ставь докер или вагрант. И монтируй туда папку со всеми сайтиками. Версией пхп не ограничивается окружение.
khanid
11.10.2016 16:42А вариант с IIS раз под виндой не рассматривается в принципе? Там же на каждое запущенное приложение можно повесить свой обработчик php.
Для старых версий (на 2k3) приложения надо было руками разносить — оно предлагало дефолтное обычно, на новых — под каждый сайт — своё приложение болтается. И у каждого свой обработчик. Даже с перезапуском не придётся морочаться.
Несмотря на то, что винду с iis хаят некоторые, это не отнимает у последнего вот таких вот преимуществ (или отсутствие подобия связки apache+nginx, nginx+php-fpm.
А так у вас работы по перезапускам много. На апаче повесить на разные порты — вариант. В описанной мной схеме php — просто на разных доменных именах.infolex
11.10.2016 17:51Я с IIS никогда не работал, но PHP на IIS? К такому жизнь меня не готовила) Для меня IIS — синоним проектов на ASP.
khanid
12.10.2016 14:10но PHP на IIS/blockquote>
А почему нет? Я с iis работал только с 2003 сервера. Проблем не заметил. Всё чинно-благородно. Что было до этого — не знаю.
istui
11.10.2016 19:16а что со скоростью? Я слышал, что IIS иногда даже быстрее, чем апач…
Плюс системы nginx+apache — приближенность к продакшен-окружению. Конфиг приложения пишется сразу девелопером и с минимальными правками переносится на сервер.khanid
12.10.2016 14:08Скорость как скорость. Хайлоадов у меня нет, поэтому в тех масштабах не скажу. В масштабах в несколько тысяч посетителей в день (ну или одновременно посетителей 100-150 активно работающих) разницы не заметил вообще. Думаю, производительность скорее в паршивость php-кода упрётся, чем в ограничения php на винде или самого iis.
Опять же. С точки зрения администратора мне безразлично, на чём поднимать принесённый материал. Что iis, про apache+nginx. Я честно не понимаю, какие там конфиги можно сильно выписывать на уровне вебсервера. Да, есть их n-ое количество, но так, чтобы это пораждало какую-то значительную разницу — не уверен (кроме случаев, когда некоторая платформа жёстко требует это и то (типа битрикса, да и то, с оговорками — поднимать проще на апаче, ясное дело, но никто же не воспрещает и на другие платформы смотреть)).
webmasterx
Это же очевидно! Разве нет?
infolex
Именно! Только этого толком нигде не описано. Или я плохой юзер гугла? «Тысячи их», вопросов, как поставить РНР7 и оставить РНР5.*, виртуальные машины создают, доп. модули на апач ставят, зачем, если цель одна и решение очевидно?
webmasterx
простые вещи могут быть не описаны, потому что они простые и до них догадаться можно самому не найдя ответа в гугле (если туда полезли за более лучшим)
saboteur_kiev
Просто зачем создавать три сервиса apache, если вы не сможете их одновременно запустить?
Ваше решение весьма специфично (костыль), и подходит только для вас. Собственно оно практически ничем не отличается от установки трех разных апачей со своим PHP, кроме экономии пары мегабайт на диске.
В качестве более продвинутого костыля, можно было бы настроить все таким образом, что структура каталога сохранялась, отдельно запускается три apache на разных портах, настраивается прозрачный прокси, в конфигах которого указывается на какой apache какой сайт будет перенаправлять.
istui
При этом nginx как прозрачный прокси еще и позволяет приблизить конфиги на дев-машине к боевым… (т.к. не так уж и редко используется связка nginx+httpd, кроме популярного nginx+php-fpm)
vgray
для меня оказался самым удобным способом. apache на трех разных портах, а впереди nginx. Через map очень удобно управлять какаой сайт на какую версию отправить.