Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

  • Music:

Apache php4+php5 на девелоперской машине

В связи с перестановкой винчестера на девелоперском ноуте кроме всего прочего переставлял веб-серверный софт — обычно это хороший повод обновить его. Поскольку одной из ближайших задач является миграция на 5-ю версию php хотелось иметь если не две версии php одновременно, то хотя бы удобный переключатель между ними.


Приборы и материалы: WinXP Pro, Апач 2.0.59, php 4-5, утилита ln для создания хардлинка, директива Include в файле конфига Apache

Step by step:
1. Поставить Апач 2.0.59 (под самый новый апач там какие-то проблемы найти собраные модули пхп, потому ну его с проблемами)
2. Скачать последние релизные ветки php 4 и 5
3. mkdir C:\phpgroup
mkdir C:\phpgroup\php4
mkdir C:\phpgroup\php5

4. Распаковать php 5 в C:\phpgroup\php5
5. Распаковать php4 в C:\phpgroup\php4\distrib
Для php 4, из distrib в c:\phpgroup\php4:
distrib\cli\php.exe
distrib\dlls\*.*
distrib\sapi\php4apache2.dll
distrib\php4ts.dll

6. добавить в System Path (MyComputer->System Properties->Advanced->Environment Variables->System->Path)
C:\phpgroup\php;

После этого компутер недо перегрузить :)
7. можно сделать общий php.ini, тогда его надо положить куда-нибудь в c:\phpgroup\ini, и именно эту директорию скормить апачу, как PHPIniDir. Я же предпочел в php4 и php5 иметь отдельный конфиг. Выбираем как больше нравится и создаем ini файлы из заготовок. Внутри не забываем прописать
extension_dir = "c:/phpgroup/php/"

8. Идем в "там, где встал апач\conf"
создаем два файла:
httpd_php4.conf:
LoadModule php4_module "c:/phpgroup/php/php4apache2.dll"

httpd_php5.conf:
LoadModule php4_module "c:/phpgroup/php/php5apache2.dll"

9. В httpd.conf пишем:
Include conf/httpd_php.conf
PHPIniDir "C:/phpgroup/php"
AddType application/x-httpd-php .php

или PHPIniDir "C:/phpgroup/ini", если Вы решили использовать один ini файл на двоих

10. делаем переключатель:
Должна же быть какая-то папка для консольных инструментов, чтобы путь к ней был в системном пути? Если нет у вас такого делаем:
mkdir c:\tools
И добавляем ее в системный путь (MyComputer->System Properties->Advanced->Environment Variables->System->Path),
не забыть перезагрузиться.

В эту директорию кладем утилиты ln,rj и создаем батник-переключатель
phpsw.bat (обратите внимание на то, чтобы пути были правильные):
@echo off
if "%1"=="" goto ver
if %1==4 goto stopservice
if %1==5 goto stopservice
echo Wrong parameter!
goto end

:ver
php -v
goto end

:stopservice
net stop apache2
if exist c:\phpgroup\php rj c:\phpgroup\php
if exist c:\phpgroup\php rmdir c:\phpgroup\php
if exist "c:\Program Files\Apache Group\Apache2\conf\httpd_php.conf" del "c:\Program Files\Apache Group\Apache2\conf\httpd_php.conf"
echo Links removed
if %1==4 goto php4
if %1==5 goto php5

:php4
ln c:\phpgroup\php4 c:\phpgroup\php
ln "c:\Program Files\Apache Group\Apache2\conf\httpd_php4.conf" "c:\Program Files\Apache Group\Apache2\conf\httpd_php.conf"
goto runservice

:php5
ln c:\phpgroup\php5 c:\phpgroup\php
ln "c:\Program Files\Apache Group\Apache2\conf\httpd_php5.conf" "c:\Program Files\Apache Group\Apache2\conf\httpd_php.conf"
goto runservice

:runservice
echo New links created
net start apache2
php -v

:end



11. теперь можно запустить
phpsw 4 (phpsw 5)

по идее все должно работать.
Текущую версию можно проверить запустив наш переключатель без параметров
phpsw

Переключается легко и удобно:
phpsw номер_версии.

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

Почитать:
Установка php4 и php5 на один Apache
DOS 7 Batch Programming
NTFS Hard Links, Directory Junctions, and Windows Shortcuts
Tags: development
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments