我试图找出足够的数字来调整某些大小的图像时调整ini_set('memory_limit', '*M')
。我在测试时不明白的是,有时候我得到Fatal error
(显然分配的内存不够),但是如果我刷新脚本几次,它最终设法调整图像大小。为什么PHP内存耗尽错误在图像调整大小上不一致?
为什么调整特定图像的内存要求不一致?为什么最终成功,如果我在浏览器中刷新php脚本(1次或更多次)?就好像PHP部分调整图像的大小,并缓存结果,准备在下次执行时继续执行。
如果我分配一个足够高的值,它始终在第一次执行(明显)上工作。但是,在分配较小的值时,它仍然有效,但值越低,我需要在浏览器中刷新脚本的次数越多,以避免出现错误。
实施例代码
ini_set('memory_limit', '64M');
$image = 'image.jpg';
$image_size = getimagesize($image);
$resize_height = round($image_size[1] * 1920/$image_size[0]);
$image_create = imagecreatefromjpeg($image);
$image_resized = imagecreatetruecolor(1920, $resize_height);
imagecopyresampled($image_resized, $image_create, 0, 0, 0, 0, 1920, $resize_height, $image_size[0], $image_size[1]);
imagejpeg($image_resized, 'image_COPY.jpg', 95);
imagedestroy($image_create);
imagedestroy($image_resized);
例错误
Fatal error: Allowed memory size of 10485760 bytes exhausted (tried to allocate 28672 bytes) in */test.php on line 12
我可以很容易地通过分配的存储器中的丰富量避免错误,但它是很难找到的阈值,和我很想知道它为什么这样工作。提前感谢任何指针。
这是否发生在128M的默认memory_limit?也许你可以在调整大小之前获得图像大小,并“即时”计算出适当的内存限制? – BenRoob