XAMPP — это связка PHP-Apache-MySQL, а так же Perl, ProFTPd, phpMyAdmin и много другого в одной готовой связке. У него есть свои плюсы и свои минусы, и информацией по исправлению одного из таких недостатков я хочу поделиться в этом посте.«Недостаток» состоит в том, что разработчики стараются включить в паке скорее свежие, нежли стабильные версии софта, которые порою еще не поддерживаются сторонними расширениями. Для меня камнем преткновения стали PHP 5.3, присутствующий в XAMPP с версии 1.7.2, и Zend Optimizer, которого для PHP 5.3 еще нет (хотя и давно обещали).
Логика и Гугль подсказали два варианта решения проблемы — даунгрейд всего XAMPP до версии 1.7.1 или даунгрейд PHP до 5.2. Второй вариант я счел более предпочтительным, поскольку он оставлял более свежие версии всего остального софта, да и показался менее хлопотным. Исходный вектор решения был найден на stackoverflow и дополнен самостоятельно для получения возможности переключаться с PHP 5.3 на 5.2 и обратно.
Решение
Мною был собран небольшой архив, содержащий все необходимое для скрещивания двух версий PHP в XAMPP 1.7.3a и измененные скрипты, позволяющие переключать версии.
Скачать архив (Яндекс.Диск)
Установка сводится к простой распаковке архива поверх вашей установки XAMPP и перезапуске веб-сервера. Функция переключения между версиями выделена в отдельную часть и лежит в папке архива contrib. Там находятся уже измененные файлы и patch для тех, кто уже модифицировал стандартные скрипты для своих нужд.
DIY или общая инструкция для других версий
…а так же для тех, кому просто интересно, как это ра��отает.
Решение основано на механизме, служившем в XAMPP 1.6.* для переключения PHP4 и PHP5 и оставшемся до сих пор, хотя и невостребованным.
Пошагово:
- Смотрим версию PHP в нашей установке. Ниже я буду считать, что она равна 5.3.1
- Скачиваем дистрибутив XAMPP 1.7.1 — это последняя версия, в которой был PHP 5.2
- Из скачанного архива копируем файлы lampp/bin/php*5.2.9 в /opt/lampp/bin/
- В той же папке все симлинки, указывающие на файлы php*5.3.1 перенаправляем на соответствующие файлы версии 5.2.9
- Файл /opt/lampp/modules/libphp5.so переименовываем в libphp5.so-5.3.1
- Снова из архива копируем файл lampp/modules/linphp5.so в файл /opt/lampp/modules/libphp5.so-5.2.9
- Создаем симлинк libphp5.so на libphp5.so-5.2.9
- На этом этапе уже можно перезапускать веб-сервер и пользоваться версией PHP 5.2.9, но мы пойдем дальше и устроим переключение версий
- Открываем файл /opt/lampp/share/lampp/activatephp
- Находим в нем строчки
- ln -s phpextdist{-$VERSION,}
- ln -s php-config{-$VERSION,}
- После них добавляем
- cd /opt/lampp/modules
- rm libphp5.so 2> /dev/null
- ln -s libphp5.so{-$VERSION,}
- Открываем файл /opt/lampp/lampp
- Находим строчки
- "php5")
- /opt/lampp/share/lampp/activatephp 5.3.1
- ;;
- После добавляем
- "php5.2")
- /opt/lampp/share/lampp/activatephp 5.2.9
- ;;
Все! Теперь мы можем набирать в консоли /opt/lampp/lampp php5.2 и проверять phpinfo ().
Ну и пара замечаний напоследок. Во-первых, в процессе гугления я встречал упоминнания, что людям удавалось подсунуть даже более свежие версии PHP 5.2, чем те, что были в XAMPP годичной давности, взяв их из репозитория дистрибутива. Я достоверность не проверял за неактуальностью для меня, да и сомневаюсь, что это корректно, поскольку пути поиска настроек и расширений в XAMPP свои.
Во-вторых, можно попытаться собрать нужную версию самому, воспользовавшись Development Package с сайта XAMPP и исходниками PHP.
P.S. Я оставлю в стороне преимущества и недостатки XAMPP по сравнению с ручной установкой связки LAMP из репозитория — здесь каждый выбирает из собственных нужд и предпочтений.
P. P. S. Сомневаюсь, в какой блог поместить, поэтому пока поместил в PHP.
