#31763 [Fbk->Opn]: Memory leak on file dowloading when using sessions?
ID: 31763
User updated by: adyzah at hotmail dot com
Reported By: adyzah at hotmail dot com
-Status: Feedback
+Status: Open
Bug Type: Apache related
Operating System: Linux
PHP Version: 4.3.10
New Comment:
Yes, is set to 1. And indeed if i set it to 0 it works. But i am not
sure if i can set it to 0 :(
Btw: from my observations if i put memory limit 200M and try to
download a 150M file, judging from the delayed response, seems that the
php engine tries to buffer all content, which is abnormal. Session
initialisation should have to affect headers and not content.
Thanks,
Adrian Zaharia
Previous Comments:
------------------------------------------------------------------------
[2005-01-30 17:11:57] iliaa@php.net
Do you have session.use_trans_sid enabled?
------------------------------------------------------------------------
[2005-01-30 12:10:31] adyzah at hotmail dot com
Description:
------------
I am testing the following code that pushes a file to the browser
(Linux + Apache 1.3 + PHP 4.3.10 but tested also under several other
configs)
!!!!!!
Try it with a BIG test1.zip (e.g. 100M in size)
Try it with wget http://server/test.php or a browser but the
result is
more accurate when using wget since in browsers could work if you
already had a succesfull download of a smaller file.
!!!!!!
What i discovered is that if i keep the 2 session initialisation
functions
the script will work ONLY if the allocated memory in php.ini is greater
than the size
of the tested file. If i remove the session functions the script works
fine
even if the test1.zip file is very big (hundreds of Megs)
Reproduce code:
---------------
<?php
session_save_path('/tmp');
session_start();
$sFileName = 'test1.zip';
$sFileDir = '/var/www/html/';
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment;filename=\"" . $sFileName .
"\"");
header("Content-Length: " . filesize($sFileDir . $sFileName));
header('Pragma: cache');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Connection: close');
header('Expires: ' . date('r', time()+60*60));
header('Last-Modified: ' . date('r', time()));
$oFp = fopen($sFileDir . $sFileName, "rb");
$iReadBufferSize = 512;
while (!feof($oFp)) {
echo fread ($oFp, $iReadBufferSize);
}
fclose ($oFp);
exit;
?>
Expected result:
----------------
The file should dowload via a browser or via wget
Actual result:
--------------
tail from apache error_log:
Allowed memory size of 12582912 bytes exhausted (tried to allocate
10240 bytes)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31763&edit=1
Thread (6 messages)