然后在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-1nn
或者Content-type:text/htmlnn
注意:声明好Content-type后要输出两个空行。
3)apache错误提示: Exec format error
脚本解释器设置错误。脚本第一行应该以'#!解释器路径'的形式, 填写脚本解释器的路径,如果是PERL程序,常见的路径为: #!/usr/bin/perl 或 #!/usr/local/bin/perl 如果是PHP程序,不需要填写解释器路径,系统会自动找到PHP。
2. Fastcgi模式
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);
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。







