Intereting Posts
Пространства имен PHP – поднимайтесь на уровень? json_encode создает неправильный JSON (с лишним скрытым характером) API подписки Instagram, запрашивающий токен доступа Список всех зарегистрированных переменных в представлении Laravel как показать ошибки на стороне клиента Использование Curl для получения удаленного источника страницы, как эхо только одна строка кода на основе его номера Вопросы безопасности PHP и AJAX Загрузка файла силы в php PHRets: использование PHP для загрузки фотографий недвижимости динамическое обновление полей выбора с помощью php mysql jquery ajax PHP Auto update selectbox на основе 1-го выбора mod_rewrite Проблема – маршрутизация страниц в строку запроса отправка пользователю mesage путем передачи их идентификатора в модальный блок Каков наилучший способ передачи или доступа к другим объектам в других классах PHP? Поиск IP-адреса клиента, подключенного через прокси-сервер

Проблемы с извлечением exif-данных для exif 2.3 с использованием PHP версии 5.2.9

Версия PHP 5.2.9

Мне было интересно, если у кого-то возникли проблемы (и, возможно, нашли разрешение) с извлечением GPS или даже только всеми данными EXIF ​​с использованием exif_read_data() PHP для EXIF ​​2.3. Моя компания недавно купила Fujifilm Finepix XP150, которая позволяет передавать данные по GPS, это важно для инструмента, который я создаю для своей компании.

Код ниже – это то, что я использую для извлечения, я прохожу один раз для списка всех данных EXIF, и второй раз дает мне долготу и широту.

 $exif = exif_read_data('./images/DSCF0006.JPG', 'GPS'); echo $exif===false ? "<strong>No header data found.</strong><br />\n" : "<strong>Image contains headers</strong><br />\n"; $exif = exif_read_data('./images/DSCF0006.JPG', 0, true); echo "<strong>IMG_20120329_104351.jpg:</strong><br />\n"; foreach ($exif as $key => $section) { foreach ($section as $name => $val) { echo "$key.$name: $val<br />\n"; } } 
 $dir = "./images/"; function readGPSinfoEXIF($image_full_name) { $exif=exif_read_data($image_full_name, 0, true); if(!$exif || $exif['GPS']['GPSLatitude'] == '') { return false; } else { $lat_ref = $exif['GPS']['GPSLatitudeRef']; echo "Lattitude Reference: ", $lat_ref, "<br />"; $lat = $exif['GPS']['GPSLatitude']; list($num, $dec) = explode('/', $lat[0]); $lat_s = $num / $dec; list($num, $dec) = explode('/', $lat[1]); $lat_m = $num / $dec; list($num, $dec) = explode('/', $lat[2]); $lat_v = $num / $dec; $lon_ref = $exif['GPS']['GPSLongitudeRef']; echo "Longitude Reference: ", $lon_ref, "<br />"; $lon = $exif['GPS']['GPSLongitude']; list($num, $dec) = explode('/', $lon[0]); $lon_s = $num / $dec; list($num, $dec) = explode('/', $lon[1]); $lon_m = $num / $dec; list($num, $dec) = explode('/', $lon[2]); $lon_v = $num / $dec; $lat_int = ($lat_s + $lat_m / 60.0 + $lat_v / 3600.0); // check orientation of latitude and prefix with (-) if S $lat_int = ($lat_ref == "S") ? '-' . $lat_int : $lat_int; $lon_int = ($lon_s + $lon_m / 60.0 + $lon_v / 3600.0); // check orientation of longitude and prefix with (-) if W $lon_int = ($lon_ref == "W") ? '-' . $lon_int : $lon_int; $gps_int = array($lat_int, $lon_int); return $gps_int; } } function dirImages($dir) { $d = dir($dir); while (false!== ($file = $d->read())) { $extension = substr($file, strrpos($file, '.')); if($extension == ".JPG" || $extension == ".jpeg" || $extension == ".gif" | $extension == ".png") { $images[$file] = $file; } $d->close(); return $images; } $array = dirImages('./images/'); $counter = 0; foreach ($array as $key => $image) { echo "<br />"; $counter++; echo "<strong>".$counter."</strong>"; echo ": "; $image_full_name = $dir."/".$key; $image_name = $key; echo "<strong>".$image_name."</strong>"; echo "<br />"; $results = readGPSinfoEXIF($image_full_name); $latitude = $results[0]; echo $latitude; echo ", "; $longitude = $results[1]; echo $longitude; echo "<br />"; } 

Я получаю отличные результаты при съемке фотографий с помощью своего Galaxy Nexus, я получаю соответствующие данные GPS и все данные EXIF, при использовании камеры я получаю exif_read_data(DSCF0006.JPG) [exif_read_data]: corrupt EXIF header: maximum directory nesting level reached

Это что-то я делаю неправильно, или exif_read_data PHP 5 не поддерживает EXIF ​​2.3? Я исследовал это, PHP.net заявляет:

 exif_read_data() also validates EXIF data tags according to the EXIF specification (» http://exif.org/Exif2-2.PDF, page 20). 

У меня также есть камера Fujifilm с той же проблемой, но я думаю, что нашел решение, я собрал здесь отчет об ошибке PHP: https://bugs.php.net/bug.php?id=66443

Если вы можете скомпилировать PHP из исходного кода, увеличьте значение MAX_IFD_NESTING_LEVEL в файле exif.c. Я поднял его с 100 до 200 и, похоже, устранил проблему.