2010-10-10 10 views
6

Ho ricevuto questo avviso quando alcune persone caricano le immagini sul nostro sito:il temuto "Avviso: imagecreatefromjpeg(): '/ tmp/filename' non è un file JPEG valido in /phpfile.php sulla riga xxx"

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /home/pathremoved/includes/snapsutils.php on line 220

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/tmp/phpiw4MFk' is not a valid JPEG file in /home/pathremoved.php on line 220

Warning: imagesx(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 222

Warning: imagesy(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 223

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/pathremoved.php on line 240

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 242

Questo accade solo con alcune immagini, che quando viene aperto in qualsiasi programma sono ok, anche arrivi al sito del sito che ho su localhost senza problemi ... I googled un po 'ma ho trovato nulla di conclusivo. ..

note php upload_max la dimensione è 5M e post_max_size è 5M. Questo non è un problema di caricamento o di memoria. Ho provato con immagini 4M senza problemi.

qualsiasi aiuto apprezzato.

+1

Quella è una grande immagine !!! Potrebbe essere la causa? –

+0

no, ho caricato immagini fino a 5mb senza problemi. –

+0

L'unica cosa che spicca un po 'nell'immagine è che è un JPEG progressivo, ma GD non dovrebbe avere problemi con quelli. Non è un'immagine CMYK o nulla. Funziona dopo un nuovo salvataggio? –

risposta

16

Dopo un po 'di ricerche su Google ho trovato this bug report. Sembra che la libreria GD sia meno tollerante dei file JPEG buggati rispetto ad altri programmi. La soluzione suggerita è stato quello di impostare GD di ignorare l'errore di JPEG prima di elaborare l'immagine, in questo modo:

ini_set("gd.jpeg_ignore_warning", 1); 

Speriamo che lavorerà per voi. Un altro potenziale problema che potresti incontrare riguarda la memoria. Sembra che GD tenga tutte le immagini in memoria come bitmap una volta che sono state aperte. Ciò significa che un'immagine da 5 MB può effettivamente consumare più memoria rispetto a un singolo thread PHP, provocando un errore fatale. Ho avuto questo problema con alcuni caricamenti di immagini e ho dovuto ridurre la dimensione massima del file che mi permetteva di aggirare il problema.

Buona fortuna e speranza che aiuti.

+0

grazie per il suggerimento, l'ho inserito ma purtroppo non ho risolto il problema. –

+0

Mi dispiace che non ha funzionato. Ho appena trovato questo nel manuale di PHP sulla pagina per imagecreatefromjpeg: "Ho scoperto che:. imagecreatefromjpeg è per il JPEG e .JPG finendo & imagecreatefromjpeg è per .jpeg e .jpg fine Tale funzione è case sensitive. " Potrebbe essere? Non ho provato questo quindi non posso dire se è così. Inoltre, se il tuo server web ha installato ImageMagick e l'estensione Imagick, potresti provare e vedere se hai lo stesso errore ... – Jeremy

+1

C'era anche questo commento nel manuale: "Se ottieni questo errore:" Attenzione: imagecreatefromjpeg(): gd-jpeg: la libreria JPEG segnala un errore irreversibile ", quindi controlla i file JPEG: se vengono salvati in formato CMYK (anziché RGB), GD non li caricherà (testato con GD 2.0.12)". Infine, c'erano commenti sulle immagini scattate con certe fotocamere che scrivevano informazioni extra nelle intestazioni JPEG causando problemi.Speriamo che una di queste idee risolva il tuo problema. – Jeremy

-2

Questa immagine causa una richiesta senza fine al server in Firefox (3.6.10). Firefox dice che contiene errori.

+0

Ho appena provato su firefox mac (3.5.11) e si apre bene. Anche chrome, IE8 senza problemi ... –

+0

Sì, posso visualizzare l'immagine, ma il caricamento non finisce mai e se provo a fermarlo, appare l'errore sopra. – ilcartolaio

0

Ho anche lo stesso problema.

abbiamo usato qui di seguito il codice per risolvere questo problema e funziona per me,

... 
$image = @ImageCreateFromJpeg($image_name); 
if (!$image) 
{ 
    $image= imagecreatefromstring(file_get_contents($image_name)); 
} 
... 

Spero che questo ti aiuta ... :)

Problemi correlati