PHP Errore fatale durante il caricamento / ridimensionamento delle immagini
-
11-09-2019 - |
Domanda
Io sto usando un codice che caricare un'immagine, mettere l'immagine nella cartella "ridimensionare", ridimensionare l'immagine, spostare l'immagine in un'altra cartella, quindi eliminare l'immagine dalla cartella "ridimensionare", però io' sto ottenendo il seguente errore:
" Errore irreversibile: ammessi dimensioni della memoria di 33554432 byte esaurito (tenta di allocare 14172 byte) in /home/photogra/public_html/administrator/components/com_gallery/admin.gallery.php sulla linea 649 "
Le immagini non sono nemmeno grandi! (Ad es. 265KB)
Ecco il codice che sto utilizzando (con i numeri di riga):
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 };
Anche quando ottengo questo errore, le immagini sono sempre bloccati nella cartella "ridimensionare" .. Se qualcuno può aiutare, sarebbe fantastico! :)
Soluzione
Si sta cercando di ridimensionare tutte le immagini in una directory senza liberare la memoria dopo ogni uno. Prova ad aggiungere
imagedestroy($img);
imagedestroy($tmp_img);
Per cominciare. Inoltre, scollegare l'immagine non appena hai finito con esso, piuttosto che l'iterazione all'interno di una directory per la seconda volta.