Скажите 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 и перезапускает сервер.