|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-04-10 01:06 UTC] evilzluk at gmail dot com
Description:
------------
The problem is the fread() uses a normal amount of a memory. But there are too many unallocated anonymous memory pages.
So if the file size >2G the script may cause eating up to 2G of RAM. But the script's runtime memory is 5M.
The problem is occured even if:
$fp = fopen($file, "rb");
while(!feof($fp))
fread($fp, 1024);
fclose($fp);
After that the memory isn't released so we have a garbadge in the memory.
Test script:
---------------
<?php
$file = "A.very.big.file.avi";
ob_start();
$fp = fopen($file, "wb");
if ($fp)
{
while(!feof($fp))
{
echo(fread($fp, 1024));
if (ob_get_length())
{
ob_flush();
flush();
ob_end_flush();
}
}
fclose($fp);
@ob_flush();
@flush();
@ob_end_flush();
@ob_end_clean();
}
?>
Expected result:
----------------
The total amount of a memory usage should be at least <php script runtime memory usage> + 1024 (+ some buffer (up to 8192)). But not almost all the physical memory (0...unlimited)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Dec 21 16:00:01 2025 UTC |
Description: ------------ The problem is the fread() uses a normal amount of a memory. But there are too many unallocated anonymous memory pages. So if the file size >2G the script may cause eating up to 2G of RAM. But the script's runtime memory is 5M. The problem is occured even if: $fp = fopen($file, "rb"); while(!feof($fp)) fread($fp, 1024); fclose($fp); After that the memory isn't released so we have a garbadge in the memory. Test script: --------------- <?php $file = "A.very.big.file.avi"; ob_start(); $fp = fopen($file, "rb"); if ($fp) { while(!feof($fp)) { echo(fread($fp, 1024)); if (ob_get_length()) { ob_flush(); flush(); ob_end_flush(); } } fclose($fp); } @ob_flush(); @flush(); @ob_end_flush(); @ob_end_clean(); ?> Expected result: ---------------- The total amount of a memory usage should be at least <php script runtime memory usage> + 1024 (+ some buffer (up to 8192)). But not almost all the physical memory (0...unlimited)