学习使用apache的cgi问题

来源:互联网 发布:创力cms 编辑:程序博客网 时间:2024/06/04 17:53

   cgi是实现前后台交互的一个很简单的方法,前台通过浏览器输入一段“http://webServer/cgiName.cgi?parameter”的字符串,后台服务器部署apache之后,在后台实现cgi程序响应前台的服务请求。

   这段时间需要使用cgi去完成一个简单的请求服务功能,前台通过vbs脚本输入字符串给后台,其中str为cgi字符串。服务器接收到字符串之后

Set objhttp = createobject("msxml2.xmlhttp")

objhttp.open "GET",str, False

objhttp.send("")

对字符串进行解析,然后完成后台服务,再将处理的结果printf给前台。

    本来是一个很简单的cgi程序,但是在实现之后却遇到了大麻烦。问题是实现的cgi程序之后,gdb调试没问题,前台调用脚本执行也没问题。但是执行几次问题就来了。前台脚本执行没有结果,在浏览器中输入cgi字符串,返回的是500错误。查看apache错误日志,发现报错“Premature end of script headers”。这个问题一般是因为后台找不到正确的路径报错。而我程序里的操作文件都是根据绝对路径进行操作的,这确实很奇怪。有经验的同事讲在cgi中使用fopen函数一般使用相对路径。改为相对路径之后,果然在前台可以继续使用cgi了。但是好景不长,执行几次还是出现开始的问题。看来由绝对路径改为相对路径并没有解决根本问题。难道是我在程序中打开文件的次数过多,导致文件句柄太多造成。对程序再次检查之后发现有一处打开文件之后,操作完没有使用fclose关掉。于是窃喜,以为发现问题了。然后网上有人讲apache错误“Premature end of script headers”一般是因为在输出之前没有输出回车换行导致的,于是在正式输出之前先输出“/r/n”重编后执行,目前还没有出现之前的问题。后续还得继续观察一段时间。

    由此总结了几个问题:

1. 为什么cgi访问一会可以一会报错?(难道是之前忘fclose一个文件,导致执行几次cgi后文件操作故障?不解。。。)

2. 为什么在服务器端执行cgi程序没问题,前台执行就报500错误? 不解,有朋友说是打屏的时候应该先输出“/r/n”

,但是我的head里面已经先输出“/r/n”了。

 

结论是:有经验的同事告诉我,最好还是少用些文件操作,目前修改的程序先跑着吧,要是出问题了(千万别出问题呀) 就把文件操作精简下,能用字符串在内存中操作的,坚决不用输出文件。   

原创粉丝点击