Re: Re: The specified CGI application misbehaved by not returning acomplete set of HTTP headers.

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

 



Your suggestion to redirect stderr to stdin works splendid.


On Mon, 2004-03-22 at 12:44, DvDmanDT wrote:
> I would suspect popen() happends to output STDERR, and that dir returns some
> STDERR when no files are found, or when the argument is invalid.. And if so,
> the STDERR message would get output directly to the webserver, and if it
> contains two newlines (which it does really I think), the webserver wouldn't
> get a complete set of headers (which it's complaining about)...
> 
> Add this at the end of your command: 2 > &1, like this:
> 
> $ListDir = "dir $Dir\\*.$pattern 2>&1";
> 
> Also, I think this would be even better:
> $ListDir = "dir \"$Dir\\*.$pattern\" 2>&1";
> 
> Happy coding!
> -- 
> // DvDmanDT
> MSN: dvdmandt$hotmail.com
> Mail: dvdmandt$telia.com
> "B.A.T. Svensson" <B.A.T.Svensson@xxxxxxx> skrev i meddelandet
> news:1079951719.30259.138.camel@xxxxxxxx
> > 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