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

我安装了用于开发的PHP,MySQL和Apache堆栈。 该安装使用来自以下的configuration文件:

/etc/apache2/ /etc/php5/ 

后来我用phpbrew安装了多个PHP版本。 所有版本都可以从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) 

我试图改变configuration文件的path,所以他们指向phpbrew的PHP。 但似乎没有任何工作。

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

你需要用apxs2建立一个PHP:

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。

/家庭/卢克/斌/ 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="Loadmodulee php7_module $SOFILE" CONFFILE=$CONFFILE7 sudo a2enmod php7 sudo a2dismod php5 else FILECONTENTS="Loadmodulee 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 

看看服务器故障后如何告诉Apache哪些PHP使用?

您需要在Apache中指定PHP版本。

我发现用Apache服务器管理多个PHP版本的解决方案是运行PHP-FPM和FastCGI而不是mod_php 。 这样我就可以运行PHP的多个版本,并选择我的开发机器上的哪个站点,我想运行哪个版本的PHP。

你将需要用+fpm phpbrew标志而不是+apxs2重新编译你的PHP版本,用phpbrew fpm start命令启动它们,安装Apache libapache2-mod-fastcgi软件包,并且可能禁用apache mod_php – 但是一旦它加工。 我可以通过配置一个不同的虚拟主机指向相同的代码,但不同的PHP-FPM套接字来测试同一个站点的多个版本的PHP。

下面是通过phpbrew安装的2个PHP版本的Apache 2.4 /etc/apache2/mods-enables/fastcgi.conf配置文件的示例:

 <Ifmodulee 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> </Ifmodulee> 

然后在你的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使用+ apxs2 ext成功安装了php版本,则应该在apache2的模块库(usr / lib / apache2 / modules not / etc / apache2 / mods-available)中有一个新的“.so”文件。

应该在/ etc / apache2 / mods-available文件夹内创建一个php5.load或php7.load文件,该文件夹指向提到的.so文件。

这些.load文件中列出的.so文件是加载的版本。

要在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模块并重新启动服务器。