告诉Apache使用phpbrew安装的特定PHP版本

Vin*_*wal 23 php apache multiple-versions

我安装了PHP,MySQL和Apache堆栈用于开发.该安装使用以下配置文件:

/etc/apache2/
/etc/php5/
Run Code Online (Sandbox Code Playgroud)

后来我安装了多个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)
Run Code Online (Sandbox Code Playgroud)

我试过更改配置文件路径,所以他们指向phpbrew的PHP.但似乎没有任何效果.

如何告诉Apache使用phpbrew的PHP版本?

c9s*_*c9s 36

您需要构建一个PHP apxs2:

1)确保已安装sudo apt-get install apache2-dev.

2)phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2

然后,您应该在Apache配置文件中看到构建的模块文件.

  • 你需要`sudo apt-get install apache2-dev`才能运行apxs2. (6认同)

Luk*_*ers 23

我编写了这个脚本,因为它让我烦恼.

默认情况下phpbrew switch将更改CLI版本.要更新Apache,您必须告诉它使用新生成的.so文件.在Ubuntu上,这个文件将被创建为/usr/lib/apache2/modules/libphp$VERSION.so.

.so要生成此文件,您必须安装PHP,如:

phpbrew install php-5.6.16 +default +apxs2
Run Code Online (Sandbox Code Playgroud)

无论如何,这是我用来切换PHP版本的shell脚本.如果.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
Run Code Online (Sandbox Code Playgroud)

用法

试图切换到不是为Apache构建的PHP版本:

[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
Run Code Online (Sandbox Code Playgroud)

成功更改为具有现有.so文件的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
Run Code Online (Sandbox Code Playgroud)

  • 这非常有用!我必须开始测试php7.0但是一些网络应用程序,还不支持它,所以我必须经常在5.6和7.0之间切换,这与phpbrew一起帮助我加载!感谢分享. (5认同)