|  | Posted by John C. Frickson on 03/09/07 18:30 
On 2007-03-09 10:28, John C. Frickson wrote:> My company produces reports for our customers in PDF format. I have a
 > php script that verifies login status and access rights, and sends
 > the pdf to the client using readfile().
 >
 > This has worked fine until recently. One of our customers' reports
 > is 10.6MB, and the customer never receives it and I can't get it
 > either. I checked the Apache access_log, and it shows varying
 > amounts of bytes being sent, but always close to 10MB.
 >
 > I tried changing the php script to do fopen(), fread(), echo,
 > ob_flush() and flush(). After each flush, I write a message to a log
 > file. The messages in the log file stop at 10MB, as if the php script
 > is hung.
 >
 > Using a network monitor, I see the connection being established, the
 > HTTP GET being sent, but no content coming back.
 >
 > PHP version is 5.1.2
 > Apache is 2.2.3
 > OS is SuSE Linux Enterprise Server 10.0 - 64bit
 >
 > Current test version looks like this:
 >
 >    ini_set("output_buffering", "0");
 >    ini_set("implicit_flush", "1");
 >    ini_set("memory_limit", "100M");
 >    ini_set("max_execution_time", "600");
 >    $lth = 0;
 >    $in = fopen($path, "r");
 >    while (!feof($in)) {
 >      $data = fread($in, 8192);
 >      $lth += strlen($data);
 >      $errLog->WriteLog("Read $lth bytes" , "debug.txt");
 >      echo $data;
 >      $errLog->WriteLog("After echo" , "debug.txt");
 >      ob_flush();
 >      $errLog->WriteLog("After ob_flush" , "debug.txt");
 >      flush();
 >      $errLog->WriteLog("After flush" , "debug.txt");
 >    }
 >    $errLog->WriteLog("Got EOF", "debug.txt");
 >    fclose($in);
 >    $errLog->WriteLog("End of Script - read $lth bytes", "debug.txt");
 >
 >
 > The last five lines of the debug.txt log file say:
 >
 >    Read 10223616 bytes
 >    After echo
 >    After ob_flush
 >    After flush
 >    Read 10231808 bytes
 >    After echo
 >
 > So it's never returning from the ob_flush() call. Time from first
 > log entry to last is about 1 second.
 >
 > Any ideas?
 > John
 
 I noticed I didn't have a "Content-Length" header, so I added it
 and it's now working. Even without the header, it should have
 worked anyway, shouldn't it?
  Navigation: [Reply to this message] |