【发布时间】:2018-11-12 19:26:59
【问题描述】:
我有一个非常大的 JS 对象,我可以通过 curl 获取,我需要将其拆分以进一步写入 MYSQL。但是当我尝试使用 forech 循环遍历它时,我遇到了 memory_size 不足的问题。是否有任何选项可以在不增加 php 内存大小的情况下以较少的服务器负载来处理数组?这是我的代码,但它不起作用
致命错误:允许的内存大小为 33554432 字节已用尽(尝试分配 20480 字节)
<?php
#ini_set('memory_limit', '-1');
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl,CURLOPT_URL,'http://img.combats.com/auction/dump.js');
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$out_shortinfo = curl_exec($curl);
$json = json_decode(str_replace('var auction_dump=', '', $out_shortinfo), true);
foreach ($json as $key=>$value) {
if($key > 0)
{
echo $value['name'].' ';
echo $value['txt'].' ';
echo $value['_auc']['id'].'<br>';
}
}
curl_close($curl);
}
?>
【问题讨论】:
-
“非常大”到底有多大?您是否考虑过先将其写入文件,然后一次读取一行?
-
我不会打开一些随机链接,抱歉。我只是对文件大小感兴趣。我不需要看到数据就可以告诉我。
-
好吧,只是为了快速检查,您可以尝试只迭代数据而不回显任何内容,以查看您是否仍然耗尽内存。但是仍然有可能只是解码 JSON 文件会消耗所有内存。文件大小为 7.26 MB,但将其扩展为 PHP 对象/数组结构将消耗更多内存。
-
@ADyson 不好意思,修正一下,内存问题发生在 $json = json_decode(str_replace('varuction_dump=', '', $out_shortinfo), true);