You are here: Re: Large File Not Being Sent To Client « PHP Programming Language « IT news, forums, messages
Re: Large File Not Being Sent To Client

Posted by John C. Frickson on 03/11/07 18:11

On 2007-03-11 07:48, Jerry Stuckle wrote:
> John C. Frickson wrote:
>>
>>
>> On 2007-03-09 20:41, Jerry Stuckle wrote:
>>> John C. Frickson wrote:
>>>> 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?
>>>
>>> Not reliably. There is a reason for the Content-Length header - to
>>> let the browser know how much to expect.
>>>
>>> Without the header the browser is free to figure on it's own how long
>>> the data should be (no browser I know of allows "unlimited length).
>>> And evidently you finally exceeded the browser default.
>>>
>>
>> Except NO data ever got sent to the browser. So it's something in
>> either PHP or Apache that decided to quit. True, I wrote bad code
>> by forgetting the Content-Length header, but it's a bit disturbing
>> that PHP or Apache just didn't send any data without any kind of
>> warning or error message.
>
> What's in your Apache error log?
>
> Or, if you are logging PHP errors to a separate log file (unusual, but
> possible - check phpinfo()), what's in it?
>
> And if there is such a severe error that PHP/Apache can't send your data
> to the browser, it probably can't send an error message, either. But it
> will log something.
>

Nothing in the Apache error log (where PHP errors usually go).
The Apache access log shows a "200" response code and a short
number of bytes (such as 10343101 when it should be 11500016).

I'm cross-posting this to a couple other groups that might be
relevant.

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация