在我的 Apache 服务器上,我想同时运行多个版本的 PHP,以便我可以根据项目的需要轻松地在它们之间切换。我注意到,一些提供多个 PHP 版本的共享托管提供商要求您在以下位置定义所需的 PHP 版本.htaccess
:
AddHandler application/x-httpd-php5 .php
我想在我的服务器上实现类似的功能,以便我可以轻松切换 PHP 版本:
AddHandler application/xhttpd-php53 .php
# .. or ..
AddHandler application/xhttpd-php54 .php
# .. or ..
AddHandler application/xhttpd-php55 .php
但是我编译的所有 PHP 版本都有一个名为application/xhttpd-php
或 的处理程序php5-script
。我试图搜索./configure
允许您更改这些处理程序名称的标志,但没有找到。
我搜索了PHP github 仓库对于这些二 字符串以下是我发现的:
/sapi/apache2filter/sapi_apache2.c
(666-668 行)/sapi/apache2handler/sapi_apache2.c
(第 68-70 行)/main/php.h
(242 行)/sapi/apache/mod_php5.c
(979 行)/sapi/apache_hooks/mod_php5.c
(1408 行)
用新的处理程序名称和版本号替换这些字符串是否安全,或者是否有更广泛使用的(或实际记录的)方法来更改处理程序名称?
答案1
您可以使用其中一个 php 版本作为模块,另一个版本作为 cgi。如果您需要在某些特定项目 (vhost) 中使用特定 php 版本,则可以使用类似
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /vhosts/php55.example.net/
ServerName php55.example.net
ScriptAlias /php-fastcgi/ /usr/local/php-5.5.1/bin/
AddHandler php-fastcgi .php
AddType application/x-httpd-php .php
Action php-fastcgi /php-fastcgi/php-cgi
<Directory /vhosts/php55.example.net>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /vhosts/php54.example.net/
ServerName php54.example.net
ScriptAlias /php-fastcgi/ /usr/local/php-5.4.17/bin/
AddHandler php-fastcgi .php
AddType application/x-httpd-php .php
Action php-fastcgi /php-fastcgi/php-cgi
<Directory /vhosts/php54.example.net>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>