PHP exif_read_data больше не извлекает местоположение GPS

Я только что установил композитора через доморощенный, и, похоже, на заваривание была установлена ​​новая версия php (5.6.24). С тех пор использование exif_read_data извлекает другие метаданные (модель, экспозиция, iso и т. Д.), Но больше не извлекает GPS-информацию, такую ​​как «GPSLatitude» из фотографий.

Я запустил ту же фотографию через exiftool (автономная программа, отличная от php), и данные GPS существуют на фотографии.

PHP скомпилирован с exif (по мере того как некоторая информация потянута), поэтому я почесываю голову, почему данные GPS больше не читаются.

Скорее всего, это связано с регрессией от исправления безопасности, которое вызывало расширение ext / exif для прекращения разбора в случае «неизвестного» формата.

Это должно быть исправлено в ветвях 7.x (7.0.10 и 7.1.0 Beta 1), должно содержать правильное исправление для них, хотя оно не было объединено с ветвями 5.x, оно, скорее всего, найдет свой путь там.

Если вам нужен патч (который довольно легко преобразовать в 5.x), я сделал это здесь: http://git.php.net/?p=php-src.git;a=commit;h= aabcb5481d9e717df77192dab2894468b9fc63b4

Вот небольшой пример того, как работает ext / exif и что пошло не так:

Внутренне, когда мы анализируем данные exif, он будет считывать стандартные теги exif, как это предусмотрено спецификацией, но определенные форматы имеют определенные пользовательские теги. Они обычно также разбираются, однако ext / exif ограничен в том смысле, что мы только (в стабильных ветвях, включая 7.1) поддерживаем 6 форматов с расширенными тегами (список для каждого формата запекается в расширение). Здесь происходит регрессия. При анализе данных EXIF ​​это делается в следующем порядке:

  • Стандартные данные EXIF
  • Ищите известные форматы для парсинга пользовательских тегов, если найдена соответствующая подпись, затем проанализируйте их
  • Разбирайте дополнительные данные, такие как миниатюры, GPS и т. Д.

Исправление безопасности вызвало регресс, поскольку вы могли создавать поддельные подписи и обходить это внутренне, что может привести к недопустимым чтениям. Затем исправление запустит разбор в случае несоответствия подписи в списке запеченных в подписях из известных нам форматов, таким образом прекратив разбираться и не возвращать данные, такие как миниатюры, в результате чего exif_thumbnail () по существу не может быть использован для каких-либо, кроме 6 форматы.

Исправление, находящееся в ветвях 7.x, восстанавливает это поведение и просто продолжает анализировать эти дополнительные теги, поэтому эти функции и другие форматы, которые мы не поддерживаем напрямую, снова будут работать.

Кроме того, в 7.2 я добавлял поддержку специальных тегов Samsung, Panasonic и DJI, и теперь я просматриваю специфические данные Sony. У нас есть отчет об ошибке на php.net, который искривил все это, если вы заинтересованы в более глубоком изучении этого вопроса: https://bugs.php.net/bug.php?id=72735 . И если этот патч не исправит вашу проблему, вы более чем можете подать отчет об ошибке, чтобы мы могли изучить это.

Я надеюсь, что это было полезно для вас, и спасибо за помощь в создании PHP еще больше!