使用PHP的json_parse的内存耗尽错误

时间:2011-02-08 23:17:35

标签: php memory scripting json

我有以下代码:

<?php
$FILE="giant-data-barf.txt";

$fp = fopen($FILE,'r');

//read everything into data
$data = fread($fp, filesize($FILE));
fclose($fp);

$data_arr = json_decode($data);
var_dump($data_arr);
?>

文件giant-data-barf.txt就像它的名字所示,是一个巨大的文件(现在是5.4mb,但它可以达到几GB)

执行此脚本时,出现以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in ........./data.php on line 12

我查看了可能的解决方案,并看到了这个:

ini_set('memory_limit','16M');

我的问题是,我的记忆力有多大是否有限制?或者有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:8)

这是一个非常糟糕的想法,说,你需要设置

ini_set('memory_limit',filesize($FILE) + SOME_OVERHEAD_AMOUNT);

因为你正在将整个内容读入内存。您可能必须将内存限制设置为文件大小的两倍倍,因为 想要JSON_DECODE

请注意,在这个WEB服务器上,这将会消耗大量的内存,如果您提供的文件数量很多,那么您就不应该这样做!

它真的是巨型 JSON blob吗?您应该考虑将其转换为数据库或其他格式,您可以在使用PHP进行解析之前使用随机或行访问。

答案 1 :(得分:2)

我已经为我的所有服务器提供了100万的memory_limit ...还没有遇到麻烦。

我会考虑以某种方式拆分该文件,或者删除它并使用数据库