如何使用PHP将大型JSON文件插入数据库

时间:2017-07-26 14:43:58

标签: php json

所以,我有一个大的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"
                },
                {...},
                {...}
            ]
        }
}

1 个答案:

答案 0 :(得分:1)

您需要通过ini_sethttp://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'

信用额转到https://stackoverflow.com/a/42578190/351861