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

如何使用PHP将大型JSON文件插入数据库,php,json,Php,Json,所以,我有一个很大的JSON文件,我想将该文件中的数据插入MySQL数据库。我只能使用PHP5.6,不能更改PHP.ini文件 当我使用json\u decode()时,我得到一个错误,即有太多的内存需要分配。所以我搜索了一些图书馆,我找到了这个,我就这样使用它: set_time_limit(300); $listener = new \JsonStreamingParser\Listener\InMemoryListener(); $stream = fopen('data/stops.js

所以,我有一个很大的JSON文件,我想将该文件中的数据插入MySQL数据库。我只能使用PHP5.6,不能更改PHP.ini文件

当我使用
json\u decode()
时,我得到一个错误,即有太多的内存需要分配。所以我搜索了一些图书馆,我找到了这个,我就这样使用它:

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 第516行

我不知道如何获取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"
                },
                {...},
                {...}
            ]
        }
}

您需要通过
ini\u set
设置选项:

取自


或者,您可以使用.htaccess文件:

php_value memory_limit '512M'

积分归

这是一次性的吗?或者这种情况会经常发生吗?您可以尝试使用
.htaccess
文件,其中包含
php\u value memory\u limit 200M
(例如200M)。我想这取决于你的配置,但为meregularlym工作,每天至少一次是的,但是当我需要越来越多的内存来解析我的数组时,我正在寻找一些长远的解决方案,因为我不确定我的JSON文件将来会有多大,我不想把这个限制设为无限,如果你的JSON文件是类似元素的重复结构,你可以修改你的脚本来处理多个文件,并拆分你的JSON..老实说,我有点受支持,我有一些便宜的托管服务器,他们阻止我编辑php.ini文件,但使用.htaccess的技巧是有效的;但我仍然很好奇,我怎么才能把我的json文件分块,并将其部分转换为
json\u decode()
php_value memory_limit '512M'