所以,我有一个大的JSON文件,我想将该文件中的数据插入MySQL数据库。我只能使用PHP 5.6并且无法更改php.ini文件。
当我使用json_decode()
时,我收到错误,需要分配很多内存。所以我搜索了某种类型的库,我找到了这个library,我就是这样使用它了:
set_time_limit(300);
$listener = new \JsonStreamingParser\Listener\InMemoryListener();
$stream = fopen('data/stops.json', 'r');
try {
$parser = new \JsonStreamingParser\Parser($stream, $listener);
$parser->parse();
fclose($stream);
} catch (Exception $e) {
fclose($stream);
throw $e;
}
var_dump($listener->getJson());
但是我仍然得到关于momory的那个恼人的错误:
致命错误:允许的内存大小为134217728字节耗尽(尝试过 分配72个字节) SOME / PATH / TO / vendor / salsify / json-streaming-parser / src / Parser.php on 第516行
我不知道如何获取我的JSON文件。所以我正在寻找一些建议,或者可以帮我写一个代码来负责将JSON文件转换为数组的人,所以我将数据从该数组插入到数据库中。此外,我不是在寻找一次性解决方案,因为我需要每天至少解析一次JSON。
以下是整个JSON文件:JSON,结构如下:
{
"2017-07-26":
{
"lastUpdate":"2017-07-26 07:07:01",
"stops":[
{
"stopId":32640,
"stopCode":null,
"stopName":null,
"stopShortName":"2640",
"stopDesc":"Amona",
"subName":"2640",
"date":"2017-07-26",
"stopLat":54.49961,
"stopLon":18.44532,
"zoneId":null,
"zoneName":null,
"stopUrl":"",
"locationType":null,
"parentStation":null,
"stopTimezone":"",
"wheelchairBoarding":null,
"virtual":null,
"nonpassenger":null,
"depot":null,
"ticketZoneBorder":null,
"onDemand":null,
"activationDate":"2017-07-25"
},
{...},
{...}
]
}
}
答案 0 :(得分:1)
您需要通过ini_set
:http://php.net/manual/en/function.ini-set.php
ini_set('memory_limit','16M');
取自https://davidwalsh.name/increase-php-memory-limit-ini_set
或者,您可以使用.htaccess文件:
php_value memory_limit '512M'