Весьма актуальная задача: Иметь возможность по клику мыши менять версию PHP на Windows машине. Ранее была подобная статья, в которой создаётся 3 копии httpd.conf. Зачем? Когда есть наипростейшее решение.

Скачиваем архив с Apache HTTPd и распаковываем его в папку, например, C:\a\apache. В папке C:\a\apache\conf создаём два файла конфигурации…

php5.conf
LoadModule php5_module "c:/a/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "c:/a/php"

php7.conf
LoadModule php7_module "c:/a/php/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "c:/a/php"

… и добавляем строку:

Include conf/php.conf

В файл C:\a\apache\conf\httpd.conf после всех LoadModule.

Создаём символическую ссылку php.conf <===> php5.conf

Скрытый текст
mklink c:\a\apache\conf\php.conf c:\a\apache\conf\php5.conf

Скачиваем необходимые версии PHP…


… и распаковываем их в папки C:\a\php56 и C:\a\php70 соответственно.

Ранее, в конфигах Apache, мы указали, что PHP следует цеплять из директории C:\a\php, по-этому создаём символическую ссылку php <===> php56:

Скрытый текст
mklink /d c:\a\php c:\a\php56

Теперь инсталируем сервис…

Скрытый текст
c:\a\apache\bin\httpd -k install -n ApacheHTTPd
c:\a\apache\bin\httpd -k start -n ApacheHTTPd

… и создаём bat'ники для выбора версии PHP:

php56.bat
@echo off
c:\a\apache\bin\httpd -k stop -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 start -n ApacheHTTPd

php70.bat
@echo off
c:\a\apache\bin\httpd -k stop -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 start -n ApacheHTTPd

Теперь, для удобства, создаём ярлыки для bat'ников, и указываем в свойствах каждого «Запуск от имени администратора».

Спасибо за внимание!

UPD:

По подсказке gewisser сделал немного иначе:

В папке C:\a\apache\conf создал два конфигурационных файла:

… для PHP 5.6
LoadModule php5_module "c:/a/php56/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "c:/a/php56"
Include "c:/a/apache/conf/httpd.conf"

… для PHP 7.0
LoadModule php7_module "c:/a/php70/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "c:/a/php70"
Include "c:/a/apache/conf/httpd.conf"


… а из файла httpd.conf удалил строку
Include conf/php.conf


И поменял bat'ники для запуска:

… для PHP 5.6
@echo off & title Apache HTTPd with PHP 5.6
c:\a\apache\bin\httpd -k stop -n ApacheHTTPd
c:\a\apache\bin\httpd -k uninstall -n ApacheHTTPd
c:\a\apache\bin\httpd -k install -n ApacheHTTPd -f "c:/a/apache/conf/php56.conf"
c:\a\apache\bin\httpd -k start -n ApacheHTTPd

… для PHP 7.0
@echo off & title Apache HTTPd with PHP 7.0
c:\a\apache\bin\httpd -k stop -n ApacheHTTPd
c:\a\apache\bin\httpd -k uninstall -n ApacheHTTPd
c:\a\apache\bin\httpd -k install -n ApacheHTTPd -f "c:/a/apache/conf/php70.conf"
c:\a\apache\bin\httpd -k start -n ApacheHTTPd


P.S.

Этот способ не является каким-то ноу-хау или чем-то ещё, чем будут пользоваться миллионы, это всего лишь ответ на пост как наиболее удобный вариант.

Многие знакомы с многочисленными WAMP-комплектами, однако, судя по тому, что подобных статей не мало, можно сделать вывод, что не все хотят ими пользоваться.

Если общество не против, пишите в комменты ссылки на подобные комплекты и подобные статьи, я их прикреплю к своей статье.

Спасибо!
Поделиться с друзьями
-->

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


  1. oxidmod
    11.10.2016 17:35
    +2

    используй Вагрант, Люк!!!


    1. marapper
      11.10.2016 18:23
      +3

      А он (точнее, файловая синхронизация шаренной папки) все так же тормозит на виндовых машинах?


      1. limonte
        11.10.2016 18:34
        +1

        Все так же.


    1. E_STRICT
      11.10.2016 19:09
      +1

      1. SamDark
        12.10.2016 00:14

        Не работает.


        1. andrium
          12.10.2016 00:54

          Кто, Docker не работает? Он требует Hyper-V, на сколько мне известно, а он только в десятке есть.


          1. SamDark
            12.10.2016 01:56
            -1

            С Hyper-V тоже не работает. Точнее как… вроде что-то и работает, но собрать image или запустить готовый, отлично работающий под Ubuntu, не получается.


        1. Obramko
          12.10.2016 10:15
          +1

          Так-то работает, но с I/O и volume-ами в файловой системе Windows вообще беда.
          Собственно, и на Mac так же.
          Собственно, и с Vagrant и вообще любыми VM так же.


    1. deviant10
      12.10.2016 12:08
      +1

      BashOnWindows уже неплохо работает, у самого запущен nginx + php-fpm


      1. istui
        12.10.2016 15:22

        и как скорость?


        1. deviant10
          12.10.2016 15:35
          +2

          Для разработки более чем хватает. Думаю по скорости точно не хуже Вагранта или докера под винду.


  1. istui
    11.10.2016 19:13
    +1

    nginx + апач на 2-х портах, каждый со своей версией РНР


  1. saggid
    11.10.2016 19:23
    +5

    OpenServer позволяет всё это дело делать вообще без написания всяких конфигов) И честно: это в сто раз удобнее всяких вагрантов-магрантов и докеров-мокеров. Настраивать которые под виндой — то ещё извращение)


    1. selivanov_pavel
      11.10.2016 20:07
      +1

      SCO OpenServer не развивается с 2009 года, и сама компания обанкротилась, так что возможно вам пора обновиться :)


      1. zapimir
        11.10.2016 21:22
        +1

        Не тот openserver, а open-server.ru.
        Там сразу комплект всего нужного софта для тестирования PHP 5.2-7.0, по несколько версия MySQL, MariaDB, PostgreSQL, Redis, MongoDB и т.п. Плюс разные варианты серверов, Apache, Nginx и Apache + Nginx


        1. selivanov_pavel
          11.10.2016 21:32

          Я знаю, годная софтина. Смайлик в конце намекал на несерьёзность сообщения, но судя по минусам шутка не удалась.


          1. zapimir
            11.10.2016 21:46

            Ну учитывая тему статьи, далеко не все знают о такой тулзе, иначе зачем было бы предлагать подобные извраты с bat-файлами. Так что лучше уж дать линк, имхо.


            1. andrium
              12.10.2016 12:14

              Подобных наборов целая куча… Обрати внимание на самое начало статьи, там есть ссылка на подобный пост, в котором описана подобная конфигурация, а я лишь написал о том, как бы это можно было сделать (ИМХО) правильнее. P.S. Лично мне проще настроить самому, чем использовать какой-то готовый вариант.


              1. zapimir
                12.10.2016 18:47
                +1

                Я в курсе, что их куча. Более того кучу перепробовал (в том числе и ставил вручную), в итоге остановился на конкретном, который и советую :)
                Во многом за счет удобной панели управления, всем этим хозяйством. Так как когда вам нужно будет проверять скрипты в 6 версиях PHP, плюс заодно на разных веб-серверах — тогда поймете, батники идут в топку.


                1. SerafimArts
                  12.10.2016 23:25
                  +1

                  Так как когда вам нужно будет проверять скрипты в 6 версиях PHP, плюс заодно на разных веб-серверах — тогда поймете, батники идут в топку.

                  CI для слабаков, да? :D


      1. Kolyagrozamorey
        12.10.2016 00:43

        SCO OpenServer не развивается с 2009 года, и сама компания обанкротилась, так что возможно вам пора обновиться :)

        Последнее обновление 30 июня 2016 так что проект живой
        http://open-server.ru/news/


        1. andrium
          12.10.2016 00:58

          Да, но последняя версия самой «платформы» вышла 16 декабря 2014


  1. Akdmeh
    11.10.2016 20:42

    Идея интересная, но для обучения и лучшего ощущения принципа работы серверов отлично подходит виртуальная машина с Debian на борту (типичное окружение многих проектов среднего размера).
    В чем минусы по сравнению с Vagrant: вместо конфигурации в одном файле все приходится устанавливать и подтюнивать руками, apt-get твой лучший друг, да и оттестировать на конкретных версиях софта — намного тяжелее, чем поменять команду в Vagrant.
    В чем плюсы: ты намного больше погружаешься к реальным серверам, понимаешь, как они работают, где находятся настройки тех или иных демонов.
    Вариант Vagrant подходит отлично тем, кто уже и так знаком с linux-сервером и это только средство ускорения тестирования под конкретный софт или при командной разработке, чтобы все имели одно и то же окружения.


  1. fog
    11.10.2016 21:33

    Vagrant + Docker


  1. SerafimArts
    11.10.2016 22:45
    +6

    Зачем? Когда есть наипростейшее решение.

    Да ладно? Сокращу ваше решение до двух строк, без регистрации, смс, нгинксов, апачей и прочих штук, которые нужны нынче только на проде и стейдже.


    1) cd C:\php\7.0 && php -S 0.0.0.0:80 C:\path\to\site1
    2) cd C:\php\5.6 && php -S 0.0.0.0:81 C:\path\to\site2


    1. andrium
      12.10.2016 01:03

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


      1. Fedcomp
        12.10.2016 03:41

        Заходишь в папку с проектом и один раз запускаешь.


      1. SerafimArts
        12.10.2016 14:51
        +1

        И почему такой способ не подходит? Потому что мышью не кликается? Ну ок, создаём bat файл с этим же содержимым и кликаем в своё удовольствие.


  1. SamDark
    12.10.2016 00:16

    Кому хочется с nginx и fpm (многопроцессным), у меня есть заготовка: https://github.com/samdark/wnmp-dev


  1. BlenderRU
    12.10.2016 04:02

    Под Винду до сих пор не придумали пхп-ферму на cgi?


    1. SamDark
      12.10.2016 12:21

      1. BlenderRU
        14.10.2016 22:28

        С апачем этот способ, увы, не прокатит



  1. nikerossxp
    12.10.2016 04:30
    +1

    расписывал два года назад:
    https://habrahabr.ru/post/244117/


  1. Hayate
    12.10.2016 10:48

    А зачем вообще это делать на Windows машине?


    1. SamDark
      12.10.2016 12:21

      А почему нет?


  1. shushu
    12.10.2016 12:08

    Не сочтите за рекламу, но использовал его года 4 назад. Достаточно хорошая реализация.


  1. gewisser
    12.10.2016 14:28
    +1

    Мне кажется можно сделать проще чуть-чуть

    У меня сделано так:

    1. Регистрируем 2 сервиса httpd:

    c:\a\apache\bin\httpd -f "c:/a/apache/conf/httpd_php5.conf" -k install -n ApacheForPhp5
    c:\a\apache\bin\httpd -f "c:/a/apache/conf/httpd_php7.conf" -k install -n ApacheForPhp7
    


    Если нам нужен апач с PHP 7 то запускаем батник:
    net stop ApacheForPhp5
    net start ApacheForPhp7
    


    И если нужен апач с PHP 5 то запускаем батник:
    net stop ApacheForPhp7
    net start ApacheForPhp5
    


    1. andrium
      12.10.2016 14:30

      В чем отличие httpd_php5.conf и httpd_php7.conf? Копипаст всего конфига и разница только в нескольких строках?


      1. gewisser
        12.10.2016 14:44

        Да, разница в несколько строк и эта разница прописана в файлах.

        Далее инклудится общая часть которая будет для всех. У меня она названа просто httpd.conf


        1. andrium
          12.10.2016 15:06

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


          1. gewisser
            12.10.2016 15:25

            На вкус и цвет, как говорится. :) Как системный программист могу сказать, что при создании и удалении службы в ОС происходят накладные расходы на данную операцию. Но учитывая вычислительные мощности современных машин, этим можно пренебречь…


            1. andrium
              12.10.2016 15:41

              Да, ты прав, накладные расходы есть. Но это всё не для сервера, а для девелоперского лэптопа, чтобы иметь возможность кодить и тестить находясь где-то, где нет доступа в инетрнет. А так, конечно же, самый правильный вариант тестить на настроенном сервере.


  1. VGoudkov
    12.10.2016 14:30

    Ещё одно решение для начинающих и не очень — WAMP server


    1. andrium
      12.10.2016 14:30
      -1

      Да-да, все в курсе)