【发布时间】:2011-06-23 19:16:27
【问题描述】:
我有以下代码:
<?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');
我的问题是,我应该设置多大的内存有限制吗?或者有没有更好的方法来解决这个问题?
【问题讨论】:
-
这可能不是 PHP 完全适合的工作。可以使用命令行工具吗?
-
一个文件大小的平面文件存储会给你带来很多问题。使用 sqlite 或 mysql。如果该文件仅包含一个已被 json 编码的变量并且它是如此之大,那么您不太可能能够解决这个问题。 json 不适用于如此大的文件。使用数据库,或者将其存储在 CSV 中,或者将每一行存储在 json 中而不是整个事物中
-
唯一的问题是,有人正在以 JSON 格式向我导出整个数据库...
-
JSON 流解析器怎么样? github.com/salsify/jsonstreamingparser