我安装了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)
我试过更改配置文件路径,所以他们指向phpbrew的PHP.但似乎没有任何效果.
如何告诉Apache使用phpbrew的PHP版本?
您需要构建一个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版本的shell脚本.如果.so
找不到文件,交换机将失败,并且它将请求sudo
重启Apache的权限.
#!/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
试图切换到不是为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
成功更改为具有现有.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