ID: 40257 User updated by: angry dot slipper at gmail dot com Reported By: angry dot slipper at gmail dot com Status: Bogus Bug Type: Streams related Operating System: Linux Fedora 4 -PHP Version: 5.2.1RC4 +PHP Version: 5.2.1RC5 New Comment:
You could destroy contexts when all streams using it are closed. So when I call fclose() my previously defined $context gets unset freeing up RAM... I think that would solve the whole thing. Previous Comments: ------------------------------------------------------------------------ [2007-01-27 16:01:38] angry dot slipper at gmail dot com I have a daemon written in PHP which connects to remote servers via fopen() sending POST data. How do I clean up RAM? I need this daemon to run for months without restarting it. PS: I can’t use CURL, cause I need to read from stream with dynamically changed buffer. ------------------------------------------------------------------------ [2007-01-27 15:32:43] [EMAIL PROTECTED] All memory leaks are reported automatically. stream_context_create() creates stream context and adds it to the resource list, which is freed on shutdown. You cannot free the context with unset(), because there might be open streams using it. ------------------------------------------------------------------------ [2007-01-27 15:25:29] angry dot slipper at gmail dot com Description: ------------ stream_context_create() causes memory leaks. PHP version is actualy 5.2.1RC5 - latest available. Reproduce code: --------------- #!/www/httpd/php/cli -ne <?php $postdata=array_fill(0,128,"blah"); for ($a=0;$a<100;$a++){ $options=array('http'=>array( 'method'=>"POST", 'request_fulluri'=>"POST http://www.google.com HTTP/1.0", 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context=stream_context_create($options); unset($context,$options); echo "current: ",memory_get_usage()," delta: ",(memory_get_usage()-$prev)."\n"; $prev=memory_get_usage(); } ?> Expected result: ---------------- "current: 74496 delta: 0" line repeated. Actual result: -------------- current: 87368 delta: 87368 current: 100008 delta: 12520 <...many lines here> current: 1319348 delta: 12440 As you can clearly see each iteration eatch 12kb of RAM, which it shouldn't. If you comment the $context=stream_context_create($options); line out, delta in the example above will always be at 0. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40257&edit=1