Premature end of script headers 错误的终极处理方法

在之前的文章里面有提到过,写的cgi程序在后台服务器运行没有问题,如果使用前台URL调用,就会时不时的报出“internal server error”,查看apache的错误日志,会发现“Premature end of script headers”错误。关于这个错误在之前的文章里面也提到过。主要是三方面的原因:

 1.在输出cgi头之前,有文本输出。

 2.cgi程序中的路径错误

 3.cgi的访问权限。

 

根据这三点一一排查,均没有发现问题。奇怪的是cgi程序有时候能从前台url访问,有时候报错。cgi的程序权限也是755,是可以访问的。

仔细的想了想之后发现,问题其实在这里:cgi程序里面其实有些操作是创建文本并访问文本的。

例如:

   fd = fopen("xxx.txt","w");

这时候创建出的文本文件使用权限实际上是随机分配的(从网上看到的,不是很确定)。当cgi在后台执行时,由于是用户是root用户,权限最大,在程序执行过程中不会遇到权限问题。当在前台url执行cgi时,虽然cgi程序的权限是755,程序能够被调用。但是程序在运行中创建的文本不确定其权限能否被前台的用户级别调用,因此就会出现在url调用时报错。

 解决的方法如下:

在程序每次创建一个文件时,对这个文件的访问权限进行设置,使前台也能够具有访问权限(具体的读写权限根据自身需要设定)例如:

   fd = fopen("xxx.txt","w");

   chmod("xxx.txt",511);

  511是十进制数,对应的八进制数为777,该值表示所有用户对该文件都具有读、写、执行权限。


这样设置之后,就不会再出现cgi在服务器正常执行,url调用报错的问题。其实这个问题解决起来很简单,但是就是很隐蔽,一般不容易发现。下次在写cgi程序的时候对访问权限的问题应该更加关注些。

你可能感兴趣的:(Premature end of script headers 错误的终极处理方法)