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

Данный туториал нам не подошел, потому что на фирме действует документ, регламентирующий структуру директорий на локалке, и все сайты (около 250) у нас лежат в одной директории. Понимаю и не устаю повторять, что данный документ это полный бред, но начальство не переубедишь. Поэтому возникла необходимость быстро переключаться между версиями PHP ничего никуда не перемещая, без «этих ваших денверов и опынсерверов и прочего, все должно быть с коробки, приду правэрю, иначе уволю!».

И так, структура директорий:
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 файла подключил в каждом файле:
свои версии PHP
#конфиг httpd55.conf
LoadModule php5_module "C:/Server/PHP55/php5apache2_4.dll"

AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP55"


#конфиг httpd56.conf
LoadModule php5_module "C:/Server/PHP56/php5apache2_4.dll"

AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP56"


#конфиг httpd7.conf
LoadModule php7_module "C:/Server/PHP7/php7apache2_4.dll"

AddHandler application/x-httpd-php .php
PHPIniDir "C:/Server/PHP7"


Далее через консоль создаем 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 переключаюсь по необходимости.

Результат:

67b29af31f724490b75e9c74c3271d95.jpg

  • можно конфигурировать каждый Apache сервер под свой PHP
  • для смены версии PHP достаточно остановить один сервер и запустить другой из ApacheMonitor

P.S. За этот костыль мне даже премию выдали :)

Комментарии (12)

  • 10 октября 2016 в 16:45

    +2

    Это же очевидно! Разве нет?
    • 10 октября 2016 в 16:57

      0

      Именно! Только этого толком нигде не описано. Или я плохой юзер гугла? «Тысячи их», вопросов, как поставить РНР7 и оставить РНР5.*, виртуальные машины создают, доп. модули на апач ставят, зачем, если цель одна и решение очевидно?
      • 10 октября 2016 в 17:03

        +1

        простые вещи могут быть не описаны, потому что они простые и до них догадаться можно самому не найдя ответа в гугле (если туда полезли за более лучшим)
      • 10 октября 2016 в 17:45 (комментарий был изменён)

        +2

        Просто зачем создавать три сервиса apache, если вы не сможете их одновременно запустить?

        Ваше решение весьма специфично (костыль), и подходит только для вас. Собственно оно практически ничем не отличается от установки трех разных апачей со своим PHP, кроме экономии пары мегабайт на диске.

        В качестве более продвинутого костыля, можно было бы настроить все таким образом, что структура каталога сохранялась, отдельно запускается три apache на разных портах, настраивается прозрачный прокси, в конфигах которого указывается на какой apache какой сайт будет перенаправлять.

        • 10 октября 2016 в 18:51 (комментарий был изменён)

          0

          При этом nginx как прозрачный прокси еще и позволяет приблизить конфиги на дев-машине к боевым… (т.к. не так уж и редко используется связка nginx+httpd, кроме популярного nginx+php-fpm)
  • 10 октября 2016 в 17:53

    +1

    туториал как сделать 3 версии php для linux:
    1. Берём gentoo
    2. Ставим нужные версии
    3. И через eselct меняем версию

    Всё же windows для меня довольно сложная штука…

    • 10 октября 2016 в 17:56

      +1

      А если у меня убунту?

      /sarkazm/ Какой же этот линукс неудобный. Захотел 3 версии PHP — надо всю систему переустанавливать.

      • 10 октября 2016 в 18:07

        0

        с убунту уже кастыли, либо 3 lxc контейнера, либо phpbrew.
        • 10 октября 2016 в 18:30

          0

          PHP-FPM
          • 10 октября 2016 в 18:36

            0

            да в принципе возможно если скомпилировать в разные директории, и при конфигурации указать разные директории настроек. Но сдаётся мне что демоны одновременно не запустишь, а может и запустишь.
            • 10 октября 2016 в 18:47

              0

              https://www.sitepoint.com/run-multiple-versions-php-one-server/
              Если делать как здесь, все прекрасно работает.
              • 10 октября 2016 в 18:50

                0

                Ну я только что выше об этом и сказал, если их скомпилировать в разные директории они должны завестись.

© Habrahabr.ru