PHP内存限制问题编辑多个文件

时间:2010-12-07 16:47:57

标签: php image memory limit

我有一个循环遍历目录的脚本,并将其中的所有图像编辑为特定大小,问题是共有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???
}

3 个答案:

答案 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($图像);

这样就可以释放用过的内存。