Проблема ограничения памяти PHP при редактировании нескольких файлов - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть скрипт, который просматривает каталог и редактирует все изображения в нем до определенных размеров, проблема в том, что существует 1000 изображений общим объемом до 300 МБ.

Есть ли способ удалять это созданное изображение из памяти после каждого цикла, чтобы оно не учитывалось в 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 ]

4 голосов
/ 07 декабря 2010

Вы можете попробовать вызвать 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 голос
/ 07 декабря 2010

Убедитесь, что вы imagedestroy после записи на диск - в противном случае вы добавляете каждое новое изображение в память.

0 голосов
/ 07 декабря 2010

Вы можете изменить memory_limit в php.ini на любое значение, превышающее 16 МБ по умолчанию.

В моем случае я поместил его в 64 или 128, что достаточно.Также вы можете освободить память с помощью imagedestroy.Например:

$ image = imagecreatetruecolor (100, 100);imagedestroy ($ image);

Таким образом он освобождает использованную память.

...