Назад | Перейти на главную страницу

Установка нескольких версий php и расширений на freebsd

Я сейчас учусь работать с freebsd. В последнее время я пытался запустить несколько версий php вместе с соответствующими пакетами. Однако при установке у меня, похоже, возникают проблемы.

Местоположение по умолчанию для моего php установка /usr/local/etc/, однако я хочу иметь возможность установить php5.2, php5.3 и php5.4 в /usr/local/etc/php52, /usr/local/etc/php53 и /usr/local/etc/php54 соответственно.

Используя порты, я просто добился этого, выполнив cd /usr/ports/lang/php5x && make PREFIX="/usr/local/etc/php5x" install clean.

Теперь проблема: как мне сделать то же самое для расширений всех моих PHP versions? Когда я пытаюсь установить такие php-расширения: cd /usr/ports/lang/php5x-extension && make PREFIX="/usr/local/etc/php5x/lib/php" install clean, Я получаю эту ошибку

...
===>  PHPizing for php53-bcmath-5.3.17
env: /usr/local/bin/phpize: No such file or directory
*** Error code 127

Stop in /usr/ports/math/php53-bcmath.
*** Error code 1

Stop in /usr/ports/lang/php53-extensions.

Мой PHPize находится в /usr/local/etc/php5x/bin/phpize Итак, как мне получить make или что угодно искать phpize на правильном пути? Есть ли более простой способ поддерживать несколько установок php? Мне нужно добиться этого из-за проблем совместимости с некоторым устаревшим кодом, который работает в версии 5.2 и не работает в версии 5.3.

Спасибо.

Переменная, о которой никто не говорил, называется PHPBASE: она позволяет работать с несколькими установками PHP на сервере FreeBSD, помещая каждую в отдельный каталог. Затем он используется в make.conf для указания конкретных модулей PHP (php52-somethings vs. php54-somethings) в правильном «базовом» каталоге.

Я видел, как его использовали несколько раз, но пока не решался попробовать.

Когда я искал пример для вас, я нашел, по-видимому, лучший пример ...

Смотри сюда:

http://webcodingstudio.com/blog/freebsd-92-server-configuration-apache-php-mysql-dns-samba

Если кто-то (все еще) задается вопросом, зачем это делать:

Ключ - это так называемые плавные обновления. Это то, что вы делаете, если вам нужно запускать серверы для реальных пользователей, а не только в собственном подвале. Если вы предоставите пользователям быстрый способ обновления и сможете переключаться между версиями, они в конечном итоге смогут выполнить миграцию. В противном случае они тоже в конечном итоге перейдут не на ту версию PHP, которую вы им даете, а на другого провайдера.

Лучше всего, как предлагает Хеннес: Создайте тюрьму для каждой версии Apache + PHP, которую вы хотите использовать.. У этого есть ряд преимуществ, два из которых - изоляция (если ваши сайты PHP 5.2 будут взломаны, ущерб будет заключен в тюрьме PHP 5.2) и простота управления (относитесь к тюрьмам, как к двум отдельным установкам FreeBSD, одна из которых работает. старый PHP, один работает с новым PHP - и вам не нужно прыгать через обручи).

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

Большим недостатком тюрем является то, что вы будете запускать отдельный Apache для каждой версии PHP, которую хотите запустить (что означает, по сути, один IP-адрес на каждую тюрьму). Если у вас только один IP-адрес и вы используете виртуальный хостинг на основе имен, вы можете сделать несколько хаков (haproxy или аналогичные и перенаправление на другой сервер на основе имен хостов), но все они по-своему уродливы.


Другой вариант (огромная ножная пушка, о которой я упоминал в своем комментарии) - это скомпилировать PHP, как вы это делали, с нестандартным PREFIX, а затем вручную установить каждое расширение - настраивая свой путь, связывая phpize двоичный файл в ожидаемое место или выполнить полную сборку вручную.

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

При использовании подхода без заключения в тюрьму у вас также есть возможность взломать вещи, поэтому Apache загружает несколько версий интерпретатора PHP (или запускает PHP как CGI), что более удобно для виртуальных хостов на основе имен. Вам просто нужно позаботиться о том, чтобы установить правильную версию PHP для каждого местоположения / типа файла. Если вы его испортите, начнут происходить «Странные вещи» (или, если вам повезет, он просто ужасно сломается, и вы не тратите часы на его отладку).

Учитывая два варианта, Jails - намного лучший вариант - ожидайте, что вы сожжете немного больше дискового пространства, но диск дешев, а дополнительная изоляция и простота обслуживания почти наверняка того стоят, если вы не можете обновить код PHP 5.2, чтобы играть хорошо. на более свежей версии.

Если вы все еще хотите установить несколько версий PHP. Вы можете легко сделать это с помощью PHP + fast-cgi. Вы можете обернуть это с помощью PHP-FPM или mod_fcgid чтобы упростить отправку на нужную версию PHP. Вот хороший учебник по Установка нескольких версий. Используйте vhost-config веб-сайта или приложения (apache), чтобы выбрать, какой PHP он должен запускать.

Вот как вы должны приступить к установке версий PHP freebsd: Установить базовую версию PHP из портов, например PHP52, затем установите PHP53, PHP54 из источника. Установка нескольких версий из портов может вызвать конфликты. Или вы можете просто установить все версии PHP из исходников.