2011-03-03 46 views
6

Estoy escribiendo un pequeño script que reúne un par de valores exif a partir de imágenes ... es decir, la fecha de creación, marca y modelo.PHP/(malo) exif datos/advertencias, ¿qué hacer?

Me doy cuenta (especialmente con la imagen enviada a través de la aplicación de correo predeterminada de iPhone) que los datos exif han sido alterados, que es un problema conocido (la aplicación de correo comprime las imágenes antes de enviarlas, incluso cuando 'tamaño completo' seleccionado). Los valores que estoy buscando parecen estar allí, aunque recibo advertencias de PHP accediéndolos. No hay problemas para obtener los valores, pero obviamente la advertencia no funciona para mí.

Llamar a ini_set ('display_errors', 0) oculta las advertencias, pero me parece descuidado. ¿Hay alguna manera de que pueda ignorar esta advertencia, en este guión, para este escenario que es un poco mejor?

Mi idea inicial fue envolver todo en un try/catch, pero la advertencia todavía se muestra de manera destacada en la página.

Simplemente estoy usando la función estándar exif_read_data(), creo que una biblioteca externa sería demasiado para lo poco que necesito.

PHP:

 
if($_GET['i']) { 
    $input = strtolower($_GET['i'] . ".jpg"); 
    if(file_exists($input)) { 
    $exif = exif_read_data($input); 
    foreach($exif as $key => $value) { 
     if(!in_array($key, Array("DateTime","Make","Model"))) { 
     unset($exif[$key]); 
     } 
    } 
    ksort($exif); 
    print_r($exif); 
    } 
} 

Advertencia:

Warning: exif_read_data(trailmarker.jpg) [exif_read_data]: Illegal IFD size: x00C4 + 2 + x3239*12 = x25B70 > x2B74 in C:\xampp\htdocs\exif\dumpfolder\exif.php on line 5

+0

¿Puede mostrar el código exacto que está utilizando y las advertencias exactas que está recibiendo? –

+0

' $ value) { if (! In_array ($ key, Array ("DateTime", "Make", "Model"))) { unset ($ result [$ key]); } } ?> – Jeff

+0

ah, bueno, no sé cómo usar StackOverflow obviamente ... :( – Jeff

Respuesta

24

Puede utilizar el @ operator para ocultar la advertencia sin utilizar display_errors, es decir

$exif = @exif_read_data(..); 

eso es mejor que el establecimiento de display_errors porque silencia las advertencias/errores en la función de lectura exif solamente, y no oculta otros posibles errores en su código.

+0

De acuerdo, más elegante que con lo que estaba trabajando. Gracias. – Jeff

+0

¡Muchas gracias! – MeV

Cuestiones relacionadas