Как работает использование памяти в PHP при сохранении изображений? - PullRequest
2 голосов
/ 18 августа 2010

Я работаю над сценарием, который перечисляет все изображения в одном каталоге, а затем изменяет размеры и сохраняет в другом каталоге.

На моем общем сервере я получаю это сообщение:

Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in...

Вопрос заключается в следующем: если PHP может освобождать память после каждого создания изображения с помощью image_destroy (), почему цикл while, сохраняющий эти изображения, выходит за пределы памяти?

-

Код просто сохраняйте изображения, не более того. Проблема в количестве изображений, а не в одном огромном изображении. Каждое изображение имеет не более 300 КБ, сценарий останавливается посередине, и точного смысла нет. Каждый раз, когда он выполняется, он останавливается на некоторых изображениях.

foreach($images as $image) 
{
    $img = PhpThumbFactory::create($image);
    $img->adaptiveResize(640, 450);
    $img->createWatermark(PATH_TEMPLATE_SITE . 'img/watermark.png');
    $img->save($dirBig . $id . '.jpg','jpg');
}

Класс, используемый в этом сценарии: PHPThumb и имеет деструктор:

public function __destruct ()
{
    if (is_resource($this->oldImage))
    {
        imagedestroy($this->oldImage);
    }

    if (is_resource($this->workingImage))
    {
        imagedestroy($this->workingImage);
    }
}

У меня уже есть та же проблема с сохранением изображений с помощью других сценариев. Я думаю, что проблема не в этом классе или других типах данных, используемых в скрипте.

1 Ответ

0 голосов
/ 18 августа 2010

Проблема, похоже, связана с плагином водяных знаков, который получает экземпляр родительского класса и помещает в него приватный элемент.Я точно не знаю, но удаление закрытого члена и обработка родительского класса просто как параметра, проблема была решена.

Я также добавил обновление после 20 сохраненных изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...