PHP致命错误:内存不足 - 大数据的内存分配策略

时间:2018-03-14 22:10:33

标签: php mysql memory-management memory-leaks out-of-memory

我正在使用从远程服务器调用文件的API。此文件大约为110,592字节(.11 MB)。

但是,我有一个循环遍历$data的每次迭代,偶尔会给我一个错误:

PHP Fatal error:  Out of memory (allocated 97255424) (tried to allocate 87 bytes)

我不确定为什么偶尔会这样。我在另一个页面上有非常相似的代码,它通常没有问题。

$json = file_get_contents('https://api.com/?limit=200');
$data = json_decode($json);

$x = 0;
while($x < sizeof($data)) {
    $Id = $data[$x]->id;
    $Name = $data[$x]->name; //ERROR LINE
    $price = $data[$x]->price_usd;
    $time = $data[$x]->last_updated; //SOMETIMES ERROR LINE
    $sql = "INSERT INTO table (Id, name, price, time) 
            VALUES ('".$Id."', '".$Name."', '".$price."', '".$time."')";

    if ($conn->query($sql) === TRUE) {
        //echo "New record created successfully<br><br><br>";
    } else {
        die("Error: " . $sql . "<br>" . $conn->error."<br><br><br>");
    }

    $x = $x+1;
}

对此的任何建议都会很棒。 (我还简化了代码。循环中有更多变量,所有变量都输入到sql表中)

编辑:我的php信息设置为:memory_limit 1024M

1 个答案:

答案 0 :(得分:0)

我不确定“api.com”(您正在与之交谈的api)允许您这样做,但您应该能够减少每个循环必须处理的数据集。也许是这样的:

$pagesize = 100;
$pagenumber = 0;
while $data {
   $data = file_get_contents('https://api.com/?limit='.$pagesize.'&limit-'.$pagenumber);
   ....do all the stuff
   $pagenumber++;
}