Ton*_*ark 5 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);
?>
Run Code Online (Sandbox Code Playgroud)
正如其名称所示,文件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
Run Code Online (Sandbox Code Playgroud)
我查看了可能的解决方案,并看到了这个:
ini_set('memory_limit','16M');
Run Code Online (Sandbox Code Playgroud)
我的问题是,我的记忆力有多大是否有限制?或者有更好的方法来解决这个问题吗?
这是一个非常糟糕的想法,说,你需要设置
ini_set('memory_limit',filesize($FILE) + SOME_OVERHEAD_AMOUNT);
Run Code Online (Sandbox Code Playgroud)
因为你正在将整个事物读入记忆中.你很可能不得不将内存限制设置为2的文件大小时间,因为你也想JSON_DECODE
请注意,在Web服务器上,这将消耗大量的内存,如果文件将是您提供的许多GIGABYT,那么您就不应该这样做!
它真的是一个巨大的 JSON blob吗?您应该考虑将其转换为数据库或其他格式,您可以在使用PHP解析之前使用随机或行访问.