Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 图像JPEG内存耗尽_Php_Image Processing_Memory Leaks - Fatal编程技术网

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。