【发布时间】:2012-01-14 14:26:20
【问题描述】:
当我为大约 60,000 条记录的用户表执行以下代码时:
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$result = mysql_query("select * from users");
while ($row = mysql_fetch_object($result)) {
echo(convert(memory_get_usage(true))."\n");
}
function convert($size) {
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
我收到以下错误:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
关于如何避免脚本在每次循环中占用额外内存的任何想法?在我的实际代码中,我尝试为大型数据集提供 CSV 下载,并进行一些 PHP 预处理。
请不要建议增加 PHP 的内存限制——这是一个坏主意,更重要的是,仍然会限制使用这种技术可以处理的数据集的大小。
【问题讨论】:
-
为什么不尝试分页查询???
-
这篇文章的标题具有误导性。这不是内存泄漏,您正在以超出预设内存限制的方式处理巨大的结果。
-
@Galled -- 我正在将这些数据转储到 CSV,所以分页并不是一个真正的选择。
标签: php mysql memory-leaks