Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP/(bad) exif data/warnings, what to do?

Tags:

php

exif

I'm writing a small script that gathers a couple exif values from images... namely the creation date, make and model.

I'm noticing (particularly with image mailed through the default iPhone mail app) that the exif data has been altered, which is a known issue (the mail app compresses images before sending them, even when 'full size' is selected). The values I'm looking for appear to be there, although I get PHP warnings accessing them. No problems actually getting the values, but the warning obviously isn't working for me.

Calling ini_set('display_errors',0) hides the warnings, but seems sloppy to me. Is there any way I can ignore this warning, on this script, for this scenario that is a little better?

My initial thought was wrapping everything in a try/catch, but the warning is still displayed prominently on the page.

I'm simply using the standard exif_read_data() function, I think an external library would be a little much for what little I need.

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);
  }
}

Warning:

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

like image 516
Jeff Avatar asked Mar 03 '11 18:03

Jeff


1 Answers

You can use the @ operator to hide the warning without using display_errors, i.e.

$exif = @exif_read_data(..);

That's better than setting display_errors because it silences warnings/errors on the exif read function only, and does not hide other possible errors in your code.

like image 112
cweiske Avatar answered Sep 20 '22 13:09

cweiske