【发布时间】:2012-02-11 18:55:33
【问题描述】:
我正在编写一个批处理脚本并收到 Allowed memory size of 134217728 bytes exhausted 错误。
我不明白为什么内存会被填满。我尝试取消设置 $row 变量,但这并没有改变任何事情。这是我的代码:
// ... (sql connection)
$result = mysql_query("SELECT * FROM large_table");
while ($row = mysql_fetch_array($result)) {
echo $row['id'] . PHP_EOL;
unset($row);
}
(简化代码)
为什么内存会填满,我该如何避免?
注意:这是一个批处理脚本。这是正常的,我必须处理这样的数据(经过 100 万行)。
更新:内存不足发生在第 400 000 行左右,所以这一定是循环中的东西?如果可能,我想避免实现分页。
【问题讨论】:
-
看起来您不应该从该代码 sn-p 中耗尽内存。是否有其他变量在每次迭代中都在增长?
-
mysql查询不会真正返回整个表->意味着结果将计入已用内存?
-
可能是一个愚蠢的建议,但这是我唯一能想到的:也许你可以尝试刷新你的输出缓冲区?
-
有趣。由于您使用的是未设置的事实,因此在循环的第一次迭代后内存不应真正增加。我只是好奇如果你使用php.net/manual/en/function.mysql-unbuffered-query.php (mysql_unbuffered_query())会发生什么
-
@Matthieu 内存不足并不意味着问题就在于此。