imagejpeg内存耗尽

时间:2010-04-19 15:12:36

标签: php image-processing memory-leaks

当我找到一张大图像时,我正在创建循环显示大量图像的缩略图:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 13056 bytes)

现在我已经知道如何绕过这个:

ini_set('memory_limit', '-1');

我想知道的是它耗尽记忆的原因!是否有一些调试工具可以准确显示内存耗尽的时间?特别是那会告诉我是否有变量/数组会破坏我的记忆?

或者,是否有更好的方法来调整其他图像的大小:

$thumb=imagecreatetruecolor($newwidth,$newheight); 
$source=imagecreatefromjpeg($imgfile);
imagecopyresampled($thumb,$source,0,0,0,0,$newwidth,$newheight,$width,$height);
imagejpeg($thumb,$destinationfile,85);

非常感谢!

2 个答案:

答案 0 :(得分:3)

完成每张图片后,您可能需要致电imagedestroy()(例如$source$thumb),尤其是在处理大量图片时。 我不确定PHP的垃圾收集是否会清除GD图像资源。

答案 1 :(得分:1)

  

是否会有一些调试工具   准确地告诉我记忆的时间   排气?

您可以使用memory_get_usagememory_get_peak_usage

  

具体而言,这将告诉我是否   有变量/数组   杀了我的记忆?

有时变量只是资源持有者,实质上指的是可能用​​其他语言创建的数据结构。 PHP无法衡量这些。只需在代码中的可疑行之后使用内存使用函数来缩小罪魁祸首。

某些设置(如共享主机)会限制您修改内存要求的能力。这些限制可以在PHP,Web服务器和/或OS级别实现。您需要通过调用phpinfo()来确保您的memory_limit请求成功。