php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #34471 fread() allocates length bytes without releasing unneeded
Submitted: 2005-09-12 03:03 UTC Modified: 2005-09-12 03:21 UTC
Votes:3
Avg. Score:5.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:1 (33.3%)
Same OS:1 (33.3%)
From: wojtek at wojjie dot com Assigned:
Status: Wont fix Package: Performance problem
PHP Version: 5.0.5 OS: Gentoo/Fedora
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: wojtek at wojjie dot com
New email:
PHP Version: OS:

 

 [2005-09-12 03:03 UTC] wojtek at wojjie dot com
Description:
------------
fread() seems to allocate length amount of memory for getting data from the connection, but does not release it till you do something to variable. If $dat did have data, and you did:

$dat=$dat.'';

It would then release any unused memory. 

Not sure if this is a bug, but I thought I would submit it incase.


Reproduce code:
---------------
<?php
$fp=fsockopen('udp://192.168.0.1', 27015, $errno, $errstr);
stream_set_blocking($fp, false);
$dat=fread($fp, 4096000);
fclose($fp);
$bmem=memory_get_usage();
echo strlen($dat)."\n";
unset($dat);
echo (memory_get_usage()-$bmem)."\n";

?>


Expected result:
----------------
Difference in memory usage should not be so huge as 4095896 bytes.



Actual result:
--------------
-4095896


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-09-12 03:21 UTC] wez@php.net
That's the way fread() works.
Use stream_get_contents() instead.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 13:01:31 2024 UTC