Сообщите Apache, чтобы использовать определенную версию PHP, установленную с использованием phpbrew

У меня был установлен пакет PHP, MySQL и Apache для разработки. Эта установка использует файлы конфигурации из:

/etc/apache2/ /etc/php5/ 

Позже я установил несколько PHP-версий, используя phpbrew . Все версии доступны и переключаются с CLI. Но Apache всегда остается в версии по умолчанию, которая не была установлена ​​с использованием phpbrew .

Вот список моих установленных версий PHP.

 $ phpbrew list Installed versions: php-5.4.13 (/home/admin1/.phpbrew/php/php-5.4.13) +default -- --with-bz2=/usr php-5.5.5 (/home/admin1/.phpbrew/php/php-5.5.5) php-5.3.27 (/home/admin1/.phpbrew/php/php-5.3.27) 

Я попытался изменить пути к файлам конфигурации, поэтому они указывают на PHP-файл phpbrew. Но ничего не работает.

Как я могу сказать Apache, чтобы использовать PHP-версию phpbrew?

Solutions Collecting From Web of "Сообщите Apache, чтобы использовать определенную версию PHP, установленную с использованием phpbrew"

Вам нужно построить PHP с apxs2 :

1) Убедитесь, что вы установили sudo apt-get install apache2-dev .

2) Запустите phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2

Затем вы должны увидеть встроенный файл модуля в файле конфигурации Apache.

Я написал это, потому что это меня раздражало.

По умолчанию phpbrew switch изменит версию CLI. Чтобы обновить Apache, вам нужно будет сказать, что он использует вновь созданный файл .so . На Ubuntu этот файл будет создан как /usr/lib/apache2/modules/libphp$VERSION.so .

Чтобы этот .so файл был сгенерирован, вам необходимо установить PHP как:

 phpbrew install php-5.6.16 +default +apxs2 

В любом случае, вот сценарий оболочки, который я использую для переключения версий PHP. Переключиться не удастся, если файл .so не будет найден, и он попросит sudo привилегии перезапустить Apache.

/ Главная / Люкер / бен / phpbrewswitch

 #!/usr/bin/env bash VERSION=$1 SOFILE=/usr/lib/apache2/modules/libphp$VERSION.so CONFFILE5=/etc/apache2/mods-available/php5.load CONFFILE7=/etc/apache2/mods-available/php7.load source ~/.phpbrew/bashrc if [ -f $SOFILE ]; then phpbrew switch $VERSION phpbrew list if [[ $VERSION == 7* ]]; then FILECONTENTS="LoadModule php7_module $SOFILE" CONFFILE=$CONFFILE7 sudo a2enmod php7 sudo a2dismod php5 else FILECONTENTS="LoadModule php5_module $SOFILE" CONFFILE=$CONFFILE5 sudo a2enmod php5 sudo a2dismod php7 fi; echo $FILECONTENTS > $CONFFILE echo "AddType application/x-httpd-php .php" >> $CONFFILE echo "Updated $CONFFILE" sudo service apache2 restart else echo $VERSION "is not configured for apache" phpbrew list fi и #!/usr/bin/env bash VERSION=$1 SOFILE=/usr/lib/apache2/modules/libphp$VERSION.so CONFFILE5=/etc/apache2/mods-available/php5.load CONFFILE7=/etc/apache2/mods-available/php7.load source ~/.phpbrew/bashrc if [ -f $SOFILE ]; then phpbrew switch $VERSION phpbrew list if [[ $VERSION == 7* ]]; then FILECONTENTS="LoadModule php7_module $SOFILE" CONFFILE=$CONFFILE7 sudo a2enmod php7 sudo a2dismod php5 else FILECONTENTS="LoadModule php5_module $SOFILE" CONFFILE=$CONFFILE5 sudo a2enmod php5 sudo a2dismod php7 fi; echo $FILECONTENTS > $CONFFILE echo "AddType application/x-httpd-php .php" >> $CONFFILE echo "Updated $CONFFILE" sudo service apache2 restart else echo $VERSION "is not configured for apache" phpbrew list fi и #!/usr/bin/env bash VERSION=$1 SOFILE=/usr/lib/apache2/modules/libphp$VERSION.so CONFFILE5=/etc/apache2/mods-available/php5.load CONFFILE7=/etc/apache2/mods-available/php7.load source ~/.phpbrew/bashrc if [ -f $SOFILE ]; then phpbrew switch $VERSION phpbrew list if [[ $VERSION == 7* ]]; then FILECONTENTS="LoadModule php7_module $SOFILE" CONFFILE=$CONFFILE7 sudo a2enmod php7 sudo a2dismod php5 else FILECONTENTS="LoadModule php5_module $SOFILE" CONFFILE=$CONFFILE5 sudo a2enmod php5 sudo a2dismod php7 fi; echo $FILECONTENTS > $CONFFILE echo "AddType application/x-httpd-php .php" >> $CONFFILE echo "Updated $CONFFILE" sudo service apache2 restart else echo $VERSION "is not configured for apache" phpbrew list fi 

Применение

Попытка перейти на версию PHP, которая не была создана для Apache:

 [21:02:55] luker [~]$ phpbrewswitch 5.4.45 5.4.45 is not configured for apache php-5.6.16 php-5.6.10 * php-5.5.30 php-5.4.45 

Успешно меняем версию PHP, имеющую существующий файл .so :

 [21:03:55] luker [~]$ phpbrewswitch 5.6.16 * php-5.6.16 php-5.6.10 php-5.5.30 php-5.4.45 Updated /etc/apache2/mods-available/php5.load 

Посмотрите на сообщение о сбое сервера. Как сообщить Apache, какой PHP использовать? ,

Вам нужно указать версию PHP в Apache.

Решение, которое я нашел для управления несколькими версиями PHP с сервером Apache, – это запуск PHP-FPM и FastCGI вместо mod_php . Таким образом, у меня может быть несколько версий PHP, и выберите, какие сайты на моей машине разработки я хочу запустить, какую версию PHP.

Вам нужно будет перекомпилировать ваши версии PHP с флагом +apxs2 вместо +apxs2 , запустить их с помощью phpbrew fpm start , установить пакет Apache libapache2-mod-fastcgi и, возможно, отключить apache mod_php но он довольно гладкий, как только он за работой. Я могу протестировать один и тот же сайт с несколькими версиями PHP, просто сконфигурировав другой виртуальный хост, указывающий на тот же код, но различные сокеты PHP-FPM.

Ниже приведен пример файла конфигурации Apache 2.4 /etc/apache2/mods-enables/fastcgi.conf с двумя версиями PHP, установленными через phpbrew:

 <IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi AddType application/x-httpd-fastphp5 .php Action application/x-httpd-fastphp5 /php5-fcgi # This is for php 5.6.28 FastCgiExternalServer /usr/lib/cgi-bin/php56-cgi -socket /home/{USERNAME}/.phpbrew/php/php-5.6.28/var/run/php-fpm.sock -pass-header Authorization # This is for php 7.0.13 FastCgiExternalServer /usr/lib/cgi-bin/php70-cgi -socket /home/{USERNAME}/.phpbrew/php/php-7.0.13/var/run/php-fpm.sock -pass-header Authorization # this seems to be required by Apache 2.4.10 <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule> 

Затем в конфигурации вашего виртуального хоста apache «сайт» вы можете указать, какую версию PHP следует использовать с псевдонимом, например:

 <VirtualHost *:80> # ServerName, ServerAdmin, etc DocumentRoot /var/www/my-site-code # Then point the php5-fcgi handler to a specific version of PHP # Here is PHP7, as defined in the fastcgi.conf file Alias /php5-fcgi /usr/lib/cgi-bin/php70-cgi </VirtualHost> 

Если phpbrew успешно устанавливает версию php с + apxs2 ext, у вас должен быть новый «.so» файл в библиотеке модуля apache2 (usr / lib / apache2 / modules нет / etc / apache2 / mods-available).

Там должна быть php5.load или php7.load, созданная внутри папки / etc / apache2 / mods-available, которая указывает на указанный .so-файл.

Файл .so, указанный в этих файлах .load, является загружаемой версией.

Для переключения между версиями php5 и php7 используйте a2enmod / a2dismod php5 php7.

Вам необходимо перезагрузить apache2 после изменения конфигурации.

Если php-файлы отображаются как обычный текст, вам нужно либо добавить это в файл php * .load:

Приложение AddType / x-httpd-php .php

ИЛИ, чтобы избежать необходимости редактировать файлы загрузки php каждый раз при установке новой версии, вы можете установить это глобально в файле конфигурации apache2:

Приложение SetHandler / x-httpd-php

Эти инструкции предназначены для сервера разработки.

Мой личный сценарий для этого:

 #!/bin/bash i=1 c=1 options=() while [ $c -gt 0 ] do v=$(phpbrew list | sed -n "${i}p") if [ -z "$v" ]; then c=0 elif [ -n "$v" ]; then options+=("$v") fi i=$[$i+1] done count=0 printf "\n" echo 'Available versions:' for i in "${options[@]}" do echo "$i $[$count+1]" count=$[$count+1] done printf "\n" echo 'Which version should be enabled?' read selected chosen="${options[$selected - 1]}" chosen="$(echo -e "${chosen}" | tr -d '[:space:]')" chosen="$(echo -e "${chosen}" | sed 's/\*//g')" chosen="$(echo -e "${chosen}" | sed 's/php-//g')" echo -e "php-${chosen} to be enabled." source $HOME/.phpbrew/bashrc phpbrew switch php-${chosen} if [[ $chosen =~ ^5 ]]; then sudo a2dismod php7 sudo a2enmod php5 sudo service apache2 reload elif [[ $chosen =~ ^7 ]]; then sudo a2dismod php5 sudo a2enmod php7 sudo service apache2 reload else echo 'This script only works on php 5 and 7'; fi 

Сценарий запускает phpbrew-список от вашего имени и позволяет вам выбирать версию с помощью цифровых клавиш. Затем он запускает phpbrew-переключатель, а также включает или выключает модули apache2 и перезапускает сервер.