Ho uno script che carica le immagini e le ruota a seconda dell'orientamento e sto riscontrando il problema che quando un'immagine caricata con tag EXIF viene caricata, viene visualizzato un errore che dice:php consentito dimensione della memoria esaurita sulla rotazione del caricamento dell'immagine
ammessi dimensione della memoria di 33554432 byte esaurito (cercato di allocare 10368 byte.
E poi la linea a cui fa riferimento nel log degli errori.
ho notato che sta accadendo solo con le immagini che hanno tag EXIF. Se vengono caricate immagini normali generate da Photoshop o qualcosa, funziona senza problemi.
Il codice effettivo orientamento dell'immagine è il seguente:
function correctImageOrientation($fullpath) {
if (function_exists('exif_read_data')) {
$exif = exif_read_data($fullpath);
if($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
if($orientation != 1){
$img = imagecreatefromjpeg($fullpath);
$deg = 0;
switch ($orientation) {
case 3:
$deg = 180;
break;
case 6:
$deg = 270;
break;
case 8:
$deg = 90;
break;
}
if ($deg) {
$img = imagerotate($img, $deg, 0);
}
// then rewrite the rotated image back to the disk as $filename
imagejpeg($img, $fullpath, 100);
} // if there is some rotation necessary
} // if have the exif orientation info
} // if function exists
}
La linea è a error_log dove il problema di memoria avviene sia effettivamente quello dove si dice:
$img = imagerotate($img, $deg, 0);
Il modo in cui sono chiamandolo nello script è il seguente:
$dirname = session::value('user_id');
$rotatedfile = '/home/myfolder/public_html/'.$dirname.'/'.$file_name;
$rotatedfile = $this->correctImageOrientation($rotatedfile);
Quello che sono fondamentalmente il tentativo di ottenere è che l'immagine ruotata venga salvata nello stesso posto del file originale, sostituendola sostanzialmente.
Ancora, questo succede SOLO con le immagini che contengono informazioni EXIF. Tutti gli altri sono caricati senza problemi.
Cosa potrebbe causare questo problema di allocazione della memoria?
Wow, è così strano. Perché in realtà ho considerato un problema memory_limit e l'ho aumentato a 256MB in php.ini ma dopo aver visto che il tuo pezzo di codice l'ha risolto, ho fatto di nuovo un grep su php.ini (cosa che non ho fatto prima) e notato che c'erano 2 diversi set di memoria_limite. Che stupido da parte mia! Grazie mille per il tuo aiuto nel risolvere questo :) – user1227914
@ user1227914 Great!Inoltre, controlla la mia ultima modifica sotto il codice che spiega il motivo per cui penso che la tua RAM venga consumata così tanto e mentre aggiustando 'php.ini' potrebbe non essere una buona idea per un caso come questo. – JakeGould
Questo ha senso e implementerò i tuoi suggerimenti. Grazie mille per la risposta davvero utile :) – user1227914