passthru + auto generated headers

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I'm slightly confused with the passthru() command. The program I call writes  
html headers itself. However, passthru() makes apache sending some generated  
headers first. There's no fault with spaches in the code etc, I think.  
Here's an simplified example:

$ cat /www/example.php
   passthru("cat /tmp/output");

$ cat /tmp/output
Content-Type: text/html


$ curl -i "http://localhost/example.php"
HTTP/1.1 200 OK
Date: Sat, 16 Jul 2005 14:47:29 GMT
Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7d DAV/2 PHP/5.1.0b3
X-Powered-By: PHP/5.1.0b3
Content-Length: 66
Content-Type: text/html

Content-Type: text/html


Php5 is compiled as module. Same result with php4.3.10 as cgi.
Thanks for any help! Martin  

Re: passthru + auto generated headers

Quoted text here. Click to load it
"passthru -- Execute an external program and display raw output"

In PHP's context output is http body, http headers can be set with

Couple of possibilities:
-tell/make the program not to output it's own headers
-call the program directly as a cgi
-suppress php's header generation
-have php filter the output and extract the headers

The last one might be most approriate:
just read the output (popen/fopen) line line by line. Everything till
the first blank line are headers, so output them using header().
Everything after that is the body and could be sent to the client with

Re: passthru + auto generated headers

Hi Daniel,
I got it using the following codesnip.

$pipe = popen("/usr/local/bin/mapserv", "r");
while(!feof($pipe) and !($output === "\n")) {
   $output = fgetss($pipe);

   if (!($output === "\n"))

Thank you!

Site Timeline