Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何告诉Apache2,默认情况下运行mod_php5,但在CGI模式下运行此VH?_Php_Linux_Apache_Cgi_Mod Php - Fatal编程技术网

我如何告诉Apache2,默认情况下运行mod_php5,但在CGI模式下运行此VH?

我如何告诉Apache2,默认情况下运行mod_php5,但在CGI模式下运行此VH?,php,linux,apache,cgi,mod-php,Php,Linux,Apache,Cgi,Mod Php,服务器 我有一个开发服务器,用来承载我当前的项目。以下是一些统计数据: root@myserver:/usr/bin $ cat /etc/*-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=10.10 DISTRIB_CODENAME=maverick DISTRIB_DESCRIPTION="Ubuntu 10.10" root@myserver:/usr/bin $ apache2 -v Server version: Apache/2.2.16 (Ub

服务器

我有一个开发服务器,用来承载我当前的项目。以下是一些统计数据:

root@myserver:/usr/bin $ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
root@myserver:/usr/bin $ apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built:   Nov 18 2010 21:17:43
root@myserver:/usr/bin $ php --version
PHP 5.3.3-1ubuntu9.1 with Suhosin-Patch (cli) (built: Oct 15 2010 14:00:18)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
root@myserver:/usr/bin $ uname -r
2.6.35-22-server
问题

我正在使用
mod_php5
运行php5.3.3,它运行得非常好。但是我只需要在服务器上为一个VH运行PHP5.2.11,所以我曾经编译PHP5.2.11。我想将Apache配置为对服务器上的所有内容使用mod_php5,除了这个VH。我将在FastCGI上运行PHP5.2.11

我的测试

作为测试,我使用Apache的默认站点
/var/www
。我设置了以下目录文件以向我报告PHP版本:

  • /var/www/phpinfo.php
  • /var/www/php-5.2.11/phpinfo.php
我的目标是让
/var/www/phpinfo.php
向我展示5.3.3版(mod_php5)和
/var/www/php-5.2.11/phpinfo.php
向我展示5.2.11版(CGI)。这还不起作用

我插入了以下代码
/etc/apache2/httpd.conf

FastCgiServer /var/www/cgi-bin/php-cgi-5.2.11
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/
我在默认站点的VH定义中插入了以下代码:

<Directory /var/www/php-5.2.11/>
    AddHandler php-cgi .php
    Action php-cgi /cgi-bin-php/php-cgi-5.2.11
</Directory>

php.php
动作php cgi/cgi bin php/php-cgi-5.2.11
结果

启用
mod_php5
时:

  • /var/www/phpinfo.php->5.3.3(
    mod_php5
  • /var/www/php-5.2.11/phpinfo.php-->5.3.3(
    mod_php5
禁用
mod_php5
时:

  • /var/www/phpinfo.php--->无处理程序;Firefox尝试下载PHP文件
  • /var/www/php-5.2.11/phpinfo.php->5.2.11(CGI)
涉及的文件

一个好的选择是

如果设置正确,您可以拥有任意数量的处理程序;即使对于虚拟主机中的不同目录也是如此

为了增加安全性,有SUPPP的“偏执”模式,在该模式下,您将Unix用户和组分配给虚拟主机,脚本将作为该用户运行

我的suPHP配置如下所示:

...

[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php4-cgi
x-httpd-php5=php:/usr/bin/php5-cgi

;Handler for CGI-scripts
x-suphp-cgi=execute:!self

...
在一个简单的
.htaccess
文件中,可以使用不同版本的PHP运行脚本:

<FilesMatch \.php$>
   SetHandler x-httpd-php
</FilesMatch>

<FilesMatch \.php5$>
   SetHandler x-httpd-php5
</FilesMatch>

# etc...

SetHandler x-httpd-php
SetHandler x-httpd-php5
#等等。。。

希望这能有所帮助。

问题是
mod_php
仍然处理
.php
文件,即使为vhost设置了CGI处理程序

要解决此问题,vhost中的
需要有
SetHandler
指令:

  Action php-cgi /cgi-bin-php/php-cgi-5.2.11
  <FilesMatch \.php$>
    SetHandler php-cgi
  </FilesMatch>
</Directory>
动作php-cgi/cgi-bin-php/php-cgi-5.2.11
SetHandler php cgi

我已经更新了。

它必须是mod_php吗,或者如果您可以运行X个不同版本的php,它就足够了吗?如果可能的话,我希望它是
mod_php
。你是要建议我设置一个默认的CGI处理程序,并永久关闭
mod_php
。有
su_php
,它1)灵活,因为你可以安装大量的处理程序,2)更安全。