background image

     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);