【问题标题】:How can i work with array/JS object of very large size? [duplicate]我如何处理非常大的数组/JS 对象? [复制]
【发布时间】: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);

标签: php json curl


【解决方案1】:

试试这个兄弟

        echo $value['name'].' ';
        echo $value['txt'].' ';
        echo $value['_auc']['id'].'<br>';
        @ob_flush(); @flush();

【讨论】:

  • 不,它没有帮助,因为我在尝试 json_decode 我的 curl 字符串时有内存限制
猜你喜欢
  • 2021-10-19
  • 2021-03-20
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2010-12-27
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多