我有一个循环遍历目录的脚本,并将其中的所有图像编辑为特定大小,问题是共有1,000张图像,总计高达300MB。
有没有办法在每次循环后从内存中删除这个创建的图像,这样它就不会计入php memory_limit,或者我只需要设置内存限制为-1?
foreach($image as $file){
// obviousment this provides a valid image resource
$new_image = Common::resizeImg($file['tmp_name'], $file['ext'], 215, 121);
imagejpeg($new_image, SERVER_ROOT."/img/media/small-".$id.$file_ext, 100);
// clear/reset this memory???
}
答案 0 :(得分:4)
您可以尝试调用imagedestroy
,这将清除与传入图像资源相关的任何内存:
foreach($image as $file){
// obviousment this provides a valid image resource
$new_image = Common::resizeImg($file['tmp_name'], $file['ext'], 215, 121);
imagejpeg($new_image, SERVER_ROOT."/img/media/small-".$id.$file_ext, 100);
imagedestroy($new_image);
}
答案 1 :(得分:1)
确保在写入磁盘后imagedestroy - 否则您将每个新图像添加到内存中。
答案 2 :(得分:0)
默认情况下,您可以将php.ini中的 memory_limit 更改为16MB以上的任何内容。
在我的情况下,我把它放在64或128这就足够了。你也可以使用imagedestroy释放内存。例如:
$ image = imagecreatetruecolor(100,100); imagedestroy($图像);
这样就可以释放用过的内存。