Неустранимая ошибка PHP при загрузке/изменении размера изображений
-
11-09-2019 - |
Вопрос
Я использую код, который загружает изображение, помещает изображение в папку «изменение размера», изменяет размер изображения, перемещает изображение в другую папку, затем удаляет изображение из папки «изменение размера», однако я получаю следующая ошибка:
"Фатальная ошибка:Разрешенный размер памяти 33554432 байт исчерпан (пытался выделить 14172 байта) в /home/photogra/public_html/administrator/comComponents/com_gallery/admin.gallery.php в строке 649"
Изображения даже не большие!(например.265кб)
Вот код, который я использую (с номерами строк):
635 move_uploaded_file($_FILES['image']['tmp_name'],$mainframe->getCfg( 'absolute_path' ) ."/virtualgallery/images/resize/$newname");
636
637 /* resize images - width 600px */
638 $docRoot = $GLOBALS['mosConfig_absolute_path'];
639 $pathToImages = $docRoot.'/virtualgallery/images/resize/';
640 $pathToThumbs = $docRoot.'/virtualgallery/images/';
641 $thumbHeight = 600;
642
643 $dir = opendir( $pathToImages );
644 while (false !== ($fname = readdir( $dir ))) {
645 $info = pathinfo($pathToImages . $fname);
646 if ( strtolower($info['extension']) == 'jpg' ) {
647 $img = imagecreatefromjpeg( "{$pathToImages}{$fname}" );
648 $width = imagesx( $img );
649 $height = imagesy( $img );
650 $new_width = floor( $width * ( $thumbHeight / $height ) );
651 $new_height = $thumbHeight;
652 $tmp_img = imagecreatetruecolor( $new_width, $new_height );
653 imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
654 imagejpeg( $tmp_img, "{$pathToThumbs}{$fname}" );
655 };
656 };
657 closedir( $dir );
658
659 /* delete file(s) from resize folder */
660 $dir = $docRoot.'/virtualgallery/images/resize/';
661 foreach(glob($dir.'*.*') as $v) {
662 unlink($v);
663 };
Кроме того, когда я получаю эту ошибку, изображения застревают в папке «изменение размера».Если кто-нибудь может помочь, это было бы здорово!:)
Решение
Вы пытаетесь изменить размер всех изображений в каталоге, не освобождая память после каждого.Попробуйте добавить
imagedestroy($img);
imagedestroy($tmp_img);
Для начинающих.Кроме того, отсоедините изображение, как только вы закончите с ним, вместо того, чтобы перебирать каталог второй раз.