Скачиваем архив с Apache HTTPd и распаковываем его в папку, например, C:\a\apache. В папке C:\a\apache\conf создаём два файла конфигурации…
LoadModule php5_module "c:/a/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "c:/a/php"
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:
@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
@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)
saggid
11.10.2016 19:23+5OpenServer позволяет всё это дело делать вообще без написания всяких конфигов) И честно: это в сто раз удобнее всяких вагрантов-магрантов и докеров-мокеров. Настраивать которые под виндой — то ещё извращение)
selivanov_pavel
11.10.2016 20:07+1SCO OpenServer не развивается с 2009 года, и сама компания обанкротилась, так что возможно вам пора обновиться :)
zapimir
11.10.2016 21:22+1Не тот openserver, а open-server.ru.
Там сразу комплект всего нужного софта для тестирования PHP 5.2-7.0, по несколько версия MySQL, MariaDB, PostgreSQL, Redis, MongoDB и т.п. Плюс разные варианты серверов, Apache, Nginx и Apache + Nginxselivanov_pavel
11.10.2016 21:32Я знаю, годная софтина. Смайлик в конце намекал на несерьёзность сообщения, но судя по минусам шутка не удалась.
zapimir
11.10.2016 21:46Ну учитывая тему статьи, далеко не все знают о такой тулзе, иначе зачем было бы предлагать подобные извраты с bat-файлами. Так что лучше уж дать линк, имхо.
andrium
12.10.2016 12:14Подобных наборов целая куча… Обрати внимание на самое начало статьи, там есть ссылка на подобный пост, в котором описана подобная конфигурация, а я лишь написал о том, как бы это можно было сделать (ИМХО) правильнее. P.S. Лично мне проще настроить самому, чем использовать какой-то готовый вариант.
zapimir
12.10.2016 18:47+1Я в курсе, что их куча. Более того кучу перепробовал (в том числе и ставил вручную), в итоге остановился на конкретном, который и советую :)
Во многом за счет удобной панели управления, всем этим хозяйством. Так как когда вам нужно будет проверять скрипты в 6 версиях PHP, плюс заодно на разных веб-серверах — тогда поймете, батники идут в топку.SerafimArts
12.10.2016 23:25+1Так как когда вам нужно будет проверять скрипты в 6 версиях PHP, плюс заодно на разных веб-серверах — тогда поймете, батники идут в топку.
CI для слабаков, да? :D
Kolyagrozamorey
12.10.2016 00:43SCO OpenServer не развивается с 2009 года, и сама компания обанкротилась, так что возможно вам пора обновиться :)
Последнее обновление 30 июня 2016 так что проект живой
http://open-server.ru/news/
Akdmeh
11.10.2016 20:42Идея интересная, но для обучения и лучшего ощущения принципа работы серверов отлично подходит виртуальная машина с Debian на борту (типичное окружение многих проектов среднего размера).
В чем минусы по сравнению с Vagrant: вместо конфигурации в одном файле все приходится устанавливать и подтюнивать руками, apt-get твой лучший друг, да и оттестировать на конкретных версиях софта — намного тяжелее, чем поменять команду в Vagrant.
В чем плюсы: ты намного больше погружаешься к реальным серверам, понимаешь, как они работают, где находятся настройки тех или иных демонов.
Вариант Vagrant подходит отлично тем, кто уже и так знаком с linux-сервером и это только средство ускорения тестирования под конкретный софт или при командной разработке, чтобы все имели одно и то же окружения.
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
andrium
12.10.2016 01:03В самом начале статьи я указал ссылку на другую статью, из её содержания становится понятно, почему такой способ не подходит… да и устанешь набирать каждый раз столь длинные строки.
SerafimArts
12.10.2016 14:51+1И почему такой способ не подходит? Потому что мышью не кликается? Ну ок, создаём bat файл с этим же содержимым и кликаем в своё удовольствие.
SamDark
12.10.2016 00:16Кому хочется с nginx и fpm (многопроцессным), у меня есть заготовка: https://github.com/samdark/wnmp-dev
shushu
12.10.2016 12:08Не сочтите за рекламу, но использовал его года 4 назад. Достаточно хорошая реализация.
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
andrium
12.10.2016 14:30В чем отличие httpd_php5.conf и httpd_php7.conf? Копипаст всего конфига и разница только в нескольких строках?
gewisser
12.10.2016 14:44Да, разница в несколько строк и эта разница прописана в файлах.
Далее инклудится общая часть которая будет для всех. У меня она названа просто httpd.confandrium
12.10.2016 15:06Хорошо, только ни к чему создавать два одинаковых сервиса. По моему мнению лучше будет удалять и вновь создавать службу.
gewisser
12.10.2016 15:25На вкус и цвет, как говорится. :) Как системный программист могу сказать, что при создании и удалении службы в ОС происходят накладные расходы на данную операцию. Но учитывая вычислительные мощности современных машин, этим можно пренебречь…
andrium
12.10.2016 15:41Да, ты прав, накладные расходы есть. Но это всё не для сервера, а для девелоперского лэптопа, чтобы иметь возможность кодить и тестить находясь где-то, где нет доступа в инетрнет. А так, конечно же, самый правильный вариант тестить на настроенном сервере.
oxidmod
используй Вагрант, Люк!!!
marapper
А он (точнее, файловая синхронизация шаренной папки) все так же тормозит на виндовых машинах?
limonte
Все так же.
E_STRICT
Docker for Windows
SamDark
Не работает.
andrium
Кто, Docker не работает? Он требует Hyper-V, на сколько мне известно, а он только в десятке есть.
SamDark
С Hyper-V тоже не работает. Точнее как… вроде что-то и работает, но собрать image или запустить готовый, отлично работающий под Ubuntu, не получается.
Obramko
Так-то работает, но с I/O и volume-ами в файловой системе Windows вообще беда.
Собственно, и на Mac так же.
Собственно, и с Vagrant и вообще любыми VM так же.
deviant10
BashOnWindows уже неплохо работает, у самого запущен nginx + php-fpm
istui
и как скорость?
deviant10
Для разработки более чем хватает. Думаю по скорости точно не хуже Вагранта или докера под винду.