|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2006-09-26 15:27 UTC] tony2001@php.net
[2008-12-09 15:23 UTC] mfischer@php.net
[2009-09-16 06:06 UTC] torben@php.net
[2009-11-23 12:53 UTC] vrana@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 21:00:01 2025 UTC |
Description: ------------ Using cli on debian etch it seems that fgets leaks memory. I have replaced fgets with stream_get_line and it seems to not leak. Please forgive me if this is a programming error on my behalf...but i can't see it. PHP 5.1.6-1 (cli) (built: Sep 1 2006 13:52:26) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies Reproduce code: --------------- <? $descriptorSpec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child process will read from 1 => array("pipe", "w"), // stdout is a pipe that the child process will write to 2 => array("pipe", "w") // stderr is a pipe that the child process will write to ); for ($i=0;$i<20;++$i) { $process = proc_open('/usr/bin/uptime', $descriptorSpec, $pipes); if (is_resource($process)) { fclose($pipes[0]); while(!feof($pipes[1])) $stdout .= fgets($pipes[1], 1024); fclose($pipes[1]); fclose($pipes[2]); } $returnValue = proc_close($process); unset($returnValue, $stdout, $stderr, $process, $pipes[0], $pipes[1], $pipes[2]); print $i . ' ==> ' . memory_get_usage() . "\r\n"; } ?> Expected result: ---------------- 0 ==> 41344 1 ==> 41408 2 ==> 41408 3 ==> 41408 4 ==> 41408 5 ==> 41408 6 ==> 41408 7 ==> 41408 8 ==> 41408 9 ==> 41408 10 ==> 41408 11 ==> 41408 12 ==> 41408 13 ==> 41408 14 ==> 41408 15 ==> 41408 16 ==> 41408 17 ==> 41408 18 ==> 41408 19 ==> 41408 (this is the actual result when replacing fgets with stream_get_line) Actual result: -------------- 0 ==> 41240 1 ==> 41368 2 ==> 41432 3 ==> 41496 4 ==> 41560 5 ==> 41624 6 ==> 41688 7 ==> 41752 8 ==> 41816 9 ==> 41880 10 ==> 41944 11 ==> 42008 12 ==> 42072 13 ==> 42136 14 ==> 42200 15 ==> 42264 16 ==> 42328 17 ==> 42392 18 ==> 42456 19 ==> 42520