ID: 46018 User updated by: jimmycnw at gmail dot com Reported By: jimmycnw at gmail dot com Status: Open Bug Type: Performance problem Operating System: Linux PHP Version: 5.2.6 New Comment:
Execute SAVING part first, in separate script. Then execute LOADING in another script. DO it separately, not in one script. Previous Comments: ------------------------------------------------------------------------ [2008-09-07 15:31:07] jimmycnw at gmail dot com Description: ------------ The code is attached. Try executing 'SAVING' first. It will create a file 'temp.txt' approximately 450Kb in size. Then execute 'LOADING'. You will see, that over 3.5Mb (!!) of memory used in unserialize() function, while there are just 450Kb of data. Is it a bug in PHP? Any suggestions on how to fix it? (When I do the same with string, not array, everything works fine. The problem appears only when I use nested arrays) Reproduce code: --------------- define ('FILENAME', 'temp.txt'); define ('SIZE', 10 * 1024); // SAVING $array = array (); for ($i = 0; $i<SIZE; $i++) $array[] = array (uniqid ($i) => array ()); $data = serialize ($array); file_put_contents (FILENAME, $data); // LOADING $before = memory_get_usage (); $array = unserialize (file_get_contents (FILENAME)); $after = memory_get_usage (); echo 'Memory used: '.($after-$before).' bytes, while size of data: '.strlen (serialize ($array)); Expected result: ---------------- Memory used should be around 450Kb, while I see 3.5Mb. Actual result: -------------- Memory used: 3.5Mb ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46018&edit=1