Php 图像JPEG内存耗尽
当我找到一张大图片时,我会在很多图片中循环创建缩略图:Php 图像JPEG内存耗尽,php,image-processing,memory-leaks,Php,Image Processing,Memory Leaks,当我找到一张大图片时,我会在很多图片中循环创建缩略图: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 13056 bytes) 现在我已经知道了如何通过以下方法来避免这种情况: ini_set('memory_limit', '-1'); 我想知道的是为什么它会耗尽记忆!是否有一些调试工具可以准确地显示内存耗尽的时间?具体地说,这将告诉我是否有变量/数组正在占用我的内存 或者,是
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);
?
多谢各位 您可能需要在完成每个图像后调用(即$source
和$thumb
),尤其是在处理大量图像时。
我不确定PHP的垃圾收集是否会清除GD图像资源
是否有一些调试工具可以
告诉我记忆何时消失
精疲力竭
您可以使用和
具体来说,这会告诉我
有些变量/数组是
扼杀我的记忆
有时变量只是资源持有者,本质上是指向可以用其他语言创建的数据结构。PHP无法测量这些。只需在代码中可疑行之后使用内存使用函数,就可以缩小罪魁祸首的范围
某些设置(如共享主机)限制了您修改内存需求的能力。这些限制可以在PHP、web服务器和/或操作系统级别实现。您需要通过调用phpinfo()来确保您的内存限制请求成功。我已经这样做了,它似乎在这一行消失:$source=imagecreatefromfromjpeg($imgfile);你的某个地方仍然有内存泄漏。确保在源GD资源和目标GD资源上都执行了
imagedestroy
。添加更多内存或处理更小的图像。这是gdlib的一个常见问题,这就是为什么我更喜欢imagemagick。