The specified CGI application misbehaved by not returning a complete set of HTTP headers.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am curious about why the following error:


"The specified CGI application misbehaved by not returning a complete
set of HTTP headers."

is generated while trying to read data from an empty pipe.



**********************************************************

DISCUSSION:

I have an (working) application that renders an out put in
side a  table based on the menu selection the user does.

Basically the web pages is organized as such:

+-----------+
| PAGE HEAD |
+-+---------+
|M|         |
|E| OUTPUT  |
|N|  VIEW   |
|U|         |
. .         .
. .         .
. .         .
+-+---------+
| PAGE FOOT |
+-----------+



Now, if I select a certain menu choices, and the system is in a
certain state (will soon explain this) then the CGI error "The
specified CGI application misbehaved by not returning a complete
set of HTTP headers." occurs.

What trigger then the error then, well, it is derived from a
function like this:

(This function will output its display data the "OUTPUT VIEW".)

function ug_show_files($Dir, $pattern, $Message)
{
  print "<pre>$Message\r\n";
 
  $ListDir = "dir $Dir\\*.$pattern";
  if ($pipe = popen($ListDir, "r")) {

    while (!feof($pipe)) {
      $line = trim(fgets($pipe));
      print "$line\n";
    }

    pclose($pipe);
  }
                                                                                                                                  print"<pre>";                                                                                                                                   
  return "ok";
}

The above code list a given directory based on $pattern.
However whenever no files are found, then the above CGI error
is generated - but never if there is a content found. I was a
bit confused about this, since the only difference is that the
directory listing does not generate an output, so in my point
of view it should work, but it did not.


I boiled down the problem to be related with fgets() - the error
occurs when the directory listing does not return anything, so I
thought I would be able to get rid of the error by writing the code
like this instead:

function ug_show_files($Dir, $pattern, $Message)
{
  print "<pre>$Message\r\n";
 
  $ListDir = "dir $Dir\\*.$pattern";
  if ($pipe = popen($ListDir, "r")) {
    
    $a = fgets($pipe)
    while (!feof($pipe)) {
      $line = trim($a);
      print "$line\n";         
      $a = fgets($pipe);
    }
    pclose($pipe);
  }
                                                                                                                                  print"<pre>";                                                                                                                                   
  return "ok";
}


However the error persisted whenever the directory list
was empty so I changed the code to look like this:

function ug_show_files($Dir, $pattern, $Message)
{
  print "<pre>$Message\r\n";
 
  $ListDir = "dir $Dir";
  if ($pipe = popen($ListDir, "r")) {
    
    while (!feof($pipe)) {

      $line = trim(fgets($pipe));
      if (strpos($line, ".$pattern")) {
        print "$line\n";         
      }

    }
    pclose($pipe);
  }
                                                                                                                                  print"<pre>";                                                                                                                                   
  return "ok";
}

And after this the pages stop returning an error. Now to the
question; why is it that fgets() generates this CGI error
when fgets() read from an empty pipe?

-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux