#41296 [NEW]: Out of memory when parsing large files

From: Date: Sat, 05 May 2007 13:40:20 +0000
Subject: #41296 [NEW]: Out of memory when parsing large files
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-112287@lists.php.net to get a copy of this message
From: kiri at swol dot de Operating system: FreeBSD 6.1 i386 PHP version: 5.2.2 PHP Bug Type: Performance problem Bug description: Out of memory when parsing large files Description: ------------ I have a 73MB large xml file which will be parsed via command line with the following script. Reproduce code: --------------- set_time_limit(600); error_reporting(E_ALL); ini_set('memory_limit',-1); $ricxml2 = simplexml_load_file('path/to/file.xml'); $ricxml = xml2php($ricxml2); function xml2php($xml) { $fils = 0; $tab = false; $array = array(); foreach($xml->children() as $key => $value){ $child = xml2php($value); /* To deal with the attributes */ foreach($value->attributes() as $ak=>$av){ $child[$ak] = (string)$av; } /* Let see if the new child is not in the array */ if($tab==false && in_array($key,array_keys($array))){ /* If this element is already in the array we will create an indexed array */ $tmp = $array[$key]; $array[$key] = NULL; $array[$key][] = $tmp; $array[$key][] = $child; $tab = true; }elseif($tab == true){ /* Add an element in an existing array */ $array[$key][] = $child; }else{ /* Add a simple element */ $array[$key] = $child; } $fils++; } return $array; } Expected result: ---------------- just a converted xml structure .... it worked with files below 66 MB Actual result: -------------- the error occured in this line: in_array($key,array_keys($array)) Fatal error: Out of memory (allocated 217317376) (tried to allocate 16 bytes) in parse_ric_simplexml_initial.php5 on line 38 on the whole freebsd machine all other programms/servers are stopped so that 1.4 GB RAM is available for the script. last pid: 79586; load averages: 0.65, 0.26, 0.18 26 processes: 2 running, 24 sleeping CPU states: 42.2% user, 0.0% nice, 8.1% system, 0.0% interrupt, 49.7% idle Mem: 506M Active, 383M Inact, 204M Wired, 75M Cache, 112M Buf, 332M Free Swap: 3000M Total, 192K Used, 3000M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 79585 root 1 107 0 490M 487M CPU1 0 0:33 98.23% php5 513 root 1 96 0 3552K 1400K select 0 0:32 0.00% nmbd 434 root 1 96 0 3420K 2044K select 0 0:28 0.00% sendmail 37085 root 1 4 0 5440K 1836K sbwait 0 0:10 0.00% sshd -- Edit bug report at http://bugs.php.net/?id=41296&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=41296&r=trysnapshot44 Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=41296&r=trysnapshot52 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=41296&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=41296&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=41296&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=41296&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=41296&r=needscript Try newer version: http://bugs.php.net/fix.php?id=41296&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=41296&r=support Expected behavior: http://bugs.php.net/fix.php?id=41296&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=41296&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=41296&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=41296&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=41296&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=41296&r=dst IIS Stability: http://bugs.php.net/fix.php?id=41296&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=41296&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=41296&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=41296&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=41296&r=mysqlcfg

« previous php.bugs (#112287) next »