LoadModule php5_module modules/libphp5.so 这行。如果不注释这行会一直走到
handler 模式。也就是模块模式。
然后在 httpd.conf 增加 action:
Action application/x-httpd-php /cgi-bin/
如果在/cgi-bin/目录找不到 php-cgi.可自行从 php 的 bin 里面 cp 一个。
然后重启 apache,再打开测试页面发现 Server API 变成:CGI/FastCGI。说明成功切
换为 cgi 模式。
问题:
1) 如果 cgi 程序放在/usr/local/httpd/cgi-bin/里无法执行,遇到 403 或 500 错误的话
打开 apache
错误日志 有如下提示: Permission denied: exec of
可以检查 cgi 程序的属性,按 Linux contexts
文件 里定义的,/usr/local/httpd/cgi-bin/里
必须是 httpd_sys_script_exec_t
属性。 通过 ls -Z 查看,如果不是则通过如下命令更改:
chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi 如果是虚拟主机里的 cgi,则参考
问题 2 使之能正常使用普通的功能后,再通过 chcon 设置 cgi 文件的 context
为
httpd_sys_script_exec_t 即可。chcon -R -t httpd_sys_script_exec_t cgi-bin/
2) apache 错误提示:.... malformed header from script. Bad header=
根据提示说明有 header 有问题,查看文件输出的第一句话是什么,应该类似于如下
Content-type: text/plain; charset=iso-8859-1\n\n
或者 Content-type:text/html\n\n
注意:声明好 Content-type 后要输出两个空行。
3)apache
错误提示: Exec format error
脚本解释器设置错误。脚本第一行应该以'#!解释器路径'的形式, 填写脚本解释器的路
径,如果是 PERL 程序,常见的路径为: #!/usr/bin/perl
或 #!/usr/local/bin/perl 如果
是 PHP 程序,不需要填写解释器路径,系统会自动找到 PHP。
2、fast-cgi 模式
fast-cgi 是 cgi 的升级版本,FastCGI
像是一个常驻 (long-live)
型的 CGI,它可以
一直执行着,只要激活后,不会每次都要花费时间去 fork
一次 (
这是 CGI 最为人诟病的
fork-and-execute 模式)。
FastCGI 的工作原理是:
(1)、Web Server 启动时载入 FastCGI 进程管理器【PHP 的 FastCGI 进程管理器是 PHP-
FPM(php-FastCGI Process Manager)】(IIS ISAPI 或 Apache Module);