当我找到一张大图像时,我正在创建循环显示大量图像的缩略图:
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);
非常感谢!
答案 0 :(得分:3)
完成每张图片后,您可能需要致电imagedestroy()
(例如$source
和$thumb
),尤其是在处理大量图片时。
我不确定PHP的垃圾收集是否会清除GD图像资源。
答案 1 :(得分:1)
是否会有一些调试工具 准确地告诉我记忆的时间 排气?
您可以使用memory_get_usage和memory_get_peak_usage
具体而言,这将告诉我是否 有变量/数组 杀了我的记忆?
有时变量只是资源持有者,实质上指的是可能用其他语言创建的数据结构。 PHP无法衡量这些。只需在代码中的可疑行之后使用内存使用函数来缩小罪魁祸首。
某些设置(如共享主机)会限制您修改内存要求的能力。这些限制可以在PHP,Web服务器和/或OS级别实现。您需要通过调用phpinfo()来确保您的memory_limit请求成功。