我们当前的设置是使用 Apache 提供的 PHP 脚本mod_php
。我们刚刚开发了一个新脚本,需要通过 CGI(用于pcntl
分叉一些进程)而不是 来运行mod_php
。有人能给我一个示例配置吗?理想情况下,我们可以让mod_php
除这个脚本之外的所有脚本都运行,但如果我们必须让所有脚本都运行,那么我可以接受。
服务器详细信息: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4 带有 Suhosin-Patch
当前配置非常简单(/etc/apache2/站点可用/默认):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
</Directory>
<Directory /var/www/>
Options FollowSymLinks MultiViews
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
先谢谢您的帮助。
答案1
不要使用 CGI:它比 mod_php 慢得多。需要 fork 的脚本可以使用 shell 命令(system()
函数)启动,然后随心所欲地 fork :)
如果您仍然想要 CGI,这里有一个提示,关于如何使用 CGI 处理程序和文件执行某些.htaccess
脚本:同时运行 php4 和 php5。
答案2
CGI 是一种通用网关接口...也就是说,您不需要为特定语言设置它。但是,Apache 通常根据文件扩展名来确定如何处理文件(例如 file.cgi 与 file.php)
你的 Apache 配置很可能已经设置为处理 CGI 程序,你可能只需要做两件事
允许 CGI 从您所在的任何目录运行
<Directory /path/to/dir>
Options +ExecCGI
</Directory>
为您想要的文件扩展名设置 CGI(例如 blah.phpcgi)
AddHandler cgi-script .phpcgi