Неустранимая ошибка изменения размера изображения PHP: недостаточно памяти - PullRequest
0 голосов
/ 13 октября 2018

У меня следующий PHP-код, который изменяет размеры моих изображений до желаемого размера:

/* POSTER - resize */
                $remote_file = $castImages[$name];
                $new_width  = 296;
                $new_height = 436;
                list($width, $height) = getimagesize($remote_file);
                $image_p = imagecreatetruecolor($new_width, $new_height);
                $image = imagecreatefromjpeg($remote_file);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($image_p, '../glumci/'.$name.' BIG.jpg', 100);
                $new_width  = 74;
                $new_height = 109;
                list($width, $height) = getimagesize($remote_file);
                $image_p = imagecreatetruecolor($new_width, $new_height);
                $image = imagecreatefromjpeg($remote_file);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($image_p, '../glumci/'.$name.'.jpg', 100);
                imagedestroy($image_p);
                imagedestroy($image);

У меня есть около 5500 изображений для изменения размеров, поэтому я запускаю этот код в цикле while и получаю эту ошибку из PHP:

Fatal error: Out of memory (allocated 473956352) (tried to allocate 27263000 bytes) in D:\portal_ONLINE\UwAmp\www\inc\test.php on line 54

Затем я добавляю в скрипт PHP следующий код:

ini_set('memory_limit', '-1');

Но я получаю то же сообщение об ошибке ... как исправить эту ошибку, чтобы скрипт переименовал все 5500 изображений, а не только 50и выбросить эту ошибку?

1 Ответ

0 голосов
/ 14 октября 2018

После получения помощи от участников из ответов на повторы я получил в итоге рабочий код:

/* POSTER - resize */
            $remote_file = $castImages[$name];
            $new_width  = 296;
            $new_height = 436;
            list($width, $height) = getimagesize($remote_file);
            $image_p = imagecreatetruecolor($new_width, $new_height);
            $image = imagecreatefromjpeg($remote_file);
            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            imagejpeg($image_p, '../glumci/'.$name.' BIG.jpg', 100);
            $image_p = null;
            $image = null;

            $new_width  = 74;
            $new_height = 109;
            list($width, $height) = getimagesize($remote_file);
            $image_p = imagecreatetruecolor($new_width, $new_height);
            $image = imagecreatefromjpeg($remote_file);
            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            imagejpeg($image_p, '../glumci/'.$name.'.jpg', 100);
            imagedestroy($image_p);
            imagedestroy($image);
            $image_p = null;
            $image = null;

Использование:

$image_p = null;
$image = null;

Теперь работает около 20 минут, скрипт работает и не выдает ошибкусообщение.

...