Why does this code cause memory exhaustion?
服务器上有2个文件。 一个1,495字节的大型JSON文件和一个包含以下代码的PHP文件:
1 2 3 4 5 6 | <?php $data = json_decode(file_get_contents('data.json'), true); for ($i = 0; $i < count($data); $i++) $data[$i][7] = '1'; ?> |
我收到以下错误。 为什么?
Fatal error: Allowed memory size of 268435456 bytes exhausted
(tried to allocate 32 bytes) in /path/to/file/process.php
on line 4
(PHP版本5.4.45)
考虑到您的JSON文件只有1495字节,这听起来很奇怪。 我猜你的文件内容是对象形式(
考虑以下程序:
1 2 3 4 5 | $json = '{"a":"0"}'; $data = json_decode ($json, true); for ($i = 0; $i < count($data); $i++) $data[$i][7] = '1'; |
每次运行循环时,都会向
解决方案是将调用移出
1 2 3 |
顺便说一句,使用数组形式的JSON对象也会发生同样的问题,稍微修改一下程序:
1 2 3 4 5 | $json = '[0]'; $data = json_decode ($json, true); for ($i = 0; $i < count($data); $i++) $data[$i+1][7] = '1'; // Note the +1 |