Large File Not Being Sent To Client



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
.



Relevant Pages

  • Re: Large File Not Being Sent To Client
    ... I tried changing the php script to do fopen, fread, echo, ... The messages in the log file stop at 10MB, ... Without the header the browser is free to figure on it's own how long the data should be. ...
    (comp.lang.php)
  • Re: Large File Not Being Sent To Client
    ... I tried changing the php script to do fopen, fread, echo, ... After each flush, I write a message to a log ... The messages in the log file stop at 10MB, ...
    (comp.lang.php)
  • Re: Large File Not Being Sent To Client
    ... I tried changing the php script to do fopen, fread, echo, ... The messages in the log file stop at 10MB, ... Without the header the browser is free to figure on it's own how long the data should be. ...
    (comp.lang.php)
  • Re: help! what should I do when there is a segmentation fault in my php script
    ... i also tried to insert some echo or print ... but there's not any thing but segfault in the screen. ... but some php script works well.:.those not so complex. ... What webserver program do you use? ...
    (alt.php)
  • Re: first even php code
    ... > This is my first ever, ever PHP script. ... the first call would close the connection to the database, ... echo ''.tt; ... //Close the database connection ...
    (comp.lang.php)