خطأ فادح PHP أثناء تحميل / تغيير حجم الصور
-
11-09-2019 - |
سؤال
أنا أستخدم رمز يقوم بتحميل صورة، ووضع الصورة في مجلد "تغيير الحجم"، تغيير حجم الصورة، نقل الصورة إلى مجلد آخر، ثم حذف الصورة من مجلد "تغيير حجم"، ومع ذلك أحصل على الخطأ التالي:
"خطأ فادح: حجم الذاكرة المسموح بها 33554432 بايت استنفدت (حاول تخصيص 14172 بايت) في / home/photogra/public_html/administrator/components/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);
للمبتدئين. أيضا، إلغاء ربط الصورة بمجرد الانتهاء من ذلك بدلا من التكرار فوق الدليل مرة أخرى.