2010-10-21 12 views
6

Ho un sito Web in cui il pubblico può caricare file JPEG.Come gestire questo errore causato dal caricamento di un file JPEG problematico?

Qualcuno dal pubblico stava caricando un file JPEG non valido che stava causando il blocco del sito.

PHP ha detto ...

imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file

non ero sicuro di come ottenere intorno a questo, così ho Googled e trovato this site. E mi ha detto di aggiungere ...

ini_set('gd.jpeg_ignore_warning', 1); 

ho aggiunto che nella mia index.php (il bootstrap del mio sito, dove faccio altro ini_set()).

Questo non sembra risolvere il problema.

Come posso gestire questo caso di file JPEG non validi? Sto facendo qualcosa di sbagliato con il set INI? Sono su un host condiviso, quindi non posso modificare direttamente php.ini.

Sto usando Kohana 2.3 e il suo Image library, ma non penso che sia davvero rilevante qui.

Grazie

risposta

9

Prova attaccare un carattere @ prima del comando:

$image = @imagecreatefromjpeg("file.jpg"); 
if(!$image) die("Sorry, bad JPEG"); 

È sporco e probabilmente obsoleti (per non parlare lento), ma probabilmente rendere il vostro codice non sicuro.

Spero che questo aiuti!

+0

Oh, ho dimenticato l'operatore dell'errore soppressore! Grazie, so che non è raccomandato e brutto da morire, ma * potrebbe * essere la mia unica speranza. – alex

+0

Sì. Una soluzione rapida e sporca è spesso abbastanza buona. –

+1

'@' è solo brutto se gli errori vengono completamente deselezionati e possono propagarsi. Dato che stai controllando le condizioni di errore nella riga successiva, questo è l'uso accettabile di '@'. – deceze

5

Si potrebbe solito lavorare con imagecreatefromjpeg in questo modo:

$img = @imagecreatefromjpeg($file); 
if (!$img) { 
    // handle error yourself 
} 

Annotare il @ davanti imagecreatefromjpeg, che viene utilizzato per eliminare gli errori. Sfortunatamente non posso dirti come Kohana fa questo internamente e se potesse essere persuaso a fare la stessa cosa.

+0

Fa lo stesso, usa solo una funzione variabile perché supporta più driver. – alex

Problemi correlati