Скажите Apache использовать определенную версию PHP, установленную с помощью phpbrew
у меня был установлен стек PHP, MySQL и Apache для разработки. Эта установка использует файлы конфигурации из:
/etc/apache2/
/etc/php5/
позже я установил несколько версий PHP, используя phpbrew
. Все версии доступны и switchable от 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?
5 ответов
вам нужно построить PHP с apxs2
:
1) убедитесь, что вы установили sudo apt-get install apache2-dev
.
2) Run phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2
тогда вы должны увидеть встроенный файл модуля в файле конфигурации Apache.
Я написал это, потому что это меня раздражало.
по умолчанию phpbrew switch
изменит версию CLI. Чтобы обновить Apache, вам нужно будет сказать ему использовать вновь сгенерированный . В Ubuntu этот файл будет создан как /usr/lib/apache2/modules/libphp$VERSION.so
.
для этого .so
файл для создания, вы должны установить PHP, как:
phpbrew install php-5.6.16 +default +apxs2
в любом случае, вот сценарий оболочки, который я использую для переключения версий PHP. Переключатель не сработает, если не может быть найден, и он будет просить sudo
привилегии для перезапуска Apache.
/ главная / Лукер / бин / phpbrewswitch
#!/usr/bin/env bash
VERSION=
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, которая имеет существующий :
[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 с помощью +fpm
флаг phpbrew вместо +apxs2
запустите их с phpbrew fpm start
команда, установите Apache libapache2-mod-fastcgi
пакет и, вероятно, отключить apache mod_php
- но он довольно скользкий, когда он работает. Я могу протестировать один и тот же сайт с несколькими версиями PHP, просто настроив другой виртуальный хост, указывающий на тот же код, но разные сокеты PHP-FPM.
вот пример Apache 2.4 /etc/apache2/mods-enables/fastcgi.conf
файл конфигурации с 2 версиями 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>
затем в конфигурации Virtualhost "сайта" 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, у вас должен быть новый ".Итак " файл внутри библиотеки модулей apache2 (usr/lib/apache2 /modules not/etc/apache2 / mods-available).
должен быть php5.нагрузки или php7.load created inside /etc/apache2 / mods-доступная папка, указывающая на указанную .Итак, файл.
The .поэтому файл указан в них .load files - это версия, которая загружается.
для переключения между версией php5 и php7 используйте a2enmod / a2dismod php5 php7.
вам нужно перезагрузить apache2 после изменения конфигурации.
если файлы php отображаются как обычный текст, вам нужно либо добавить это в php*.загрузить файл:
AddType application/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 и перезапускает сервер.