关于公共网管接口CGI

先介绍俩概念
CGI(Common Gateway Interface)公共网关接口。
ISAPI(Internet Server Application Programming Interface)作为一种可用来替代CGI的方法,是由微软和Process软件公司联合提出的Web服务器上的API标准。
软件环境:
1. Windows 7 旗舰版
2.XAMPP 集成开发环境(集成了Perl,所以就不需要单独安装Active Perl之类的开发工具了)
##当然,如果你想选择性的安装各种开发工具,可以不怕麻烦的去找各种配置,而且各种错误各种百度,万变不离其配置。
##配置问题一般都在后缀名为conf的文件里进行修改,譬如:ScriptAlias /cgi-bin/ "d:/wamp/Apache2/cgi-bin/删除前面的#号,这是存放cgi文件的路径
##又譬如:搜索AddHandler  找到AddHandler  cgi-script .cgi ,这是定义可执行cgi文件扩展名,可以把.cgi 改为 .pl 或加上”, .pl” ,成为“AddHandler cgi-script .pl ,.cgi“这样两个后##缀都可以用了。

1.建立文件 test.pl , 内容如下:
#!d:/Perl/bin/perl   
##   写成!d:/Perl/bin/perl.exe也可以
## 注意,如果没有第一行或写错,apache找不到perl解释器
## ,会出现500 Internal Server     
print "Content-type:text/htmlnn";  (错误就出现在这里,应该是html\n\n)
print "CGI执行成功!";

2.在www目录下,建立一个html文件,内容如下:
<a href="http://localhost/cgi-bin/test.pl" > CGI</a>
重新启动apache server,然后在浏览器打开这个文件,提示 “CGI执行成功!”
##如果你想图方便,可以直接执行cgi-bin文件夹下的printenv.pl文件,就是把系统环境变量打印输出到浏览器上。

我的第一个perl文件是出现Premature end of script headers 报错了的。
关于出现Premature end of script headers 报错我找了下面这个解释文档,希望会有所帮助:

Premature,英文解释, 过早的。
Premature end of script headers 也就是cgi执行过早的结束了。通常这是因为CGI程序有问题,未能按照格式正确的打印完毕,就结束了。所以会报错。
但是 今天遇到一个很奇怪的问题。开发,测试环境中,某CGI运行正常,一到运营环境就报错:Premature end of script headers .
但是的逻辑就是,为什么程序没有变,但却运行突然出错了。而且一开始的时候,还能够运行。突然就报错。也没有人修改过程序,尝试重新编译,结果仍然一样报错。
后来查看cgi应用日志,发现打印了一串错误信息,报读取配置文件失败。
才恍然大悟。 cgi 在没有变更的情况下,突然无法执行的原因如下:
1 应用日志报 读取XX.conf配置文件失败。 因为之前配置文件一直读取正常,所以CGI也运行正常。
但是现在配置文件无法读取了,cgi打印了错误到页面上,此段代码存在一定的问题,导致页面无法现显示,报Premature end of script headers .
2 为什么conf文件突然无法显示了呢? 因为在suse服务器下,文件的权限默认都很少。 apache以nobody用户运行,本来没事。 因为文件数组也改成Nobody了。但是上服务器修改了某配置,保存。这配置文件变成了root ,导致该文件无法被以Nobody用户起的apache读取,报错。


而报错信息这一分支显然没有经过仔细的测试,存在问题。导致报Premature end of script headers。


所以,当程序都没有动过的时候,突然出现异常。我们就应该考虑,程序是否因为某种原因,走到了某一个特殊的分支,导致出错。此时,详细的应用日志,能给定位问题带来巨大的方便。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值