PHP exif_read_data不再提取GPS位置

Joh*_*nan 3 php gps exif metadata

我刚刚通过自制软件安装了composer,brew似乎安装了新版本的php(5.6.24).从那时起,使用exif_read_data提取其他元数据(模型,曝光,iso等),但不再从照片中提取"GPSLatitude"等GPS信息.

我通过exiftool(独立的非php程序)运行相同的照片,并且照片中确实存在GPS数据.

PHP是用exif编译的(因为有些信息被拉了),所以我很难理解为什么GPS数据不再被读取.

小智 6

这很可能是由于安全修复程序的回归导致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_t​​humbnail()基本上不能用于除6之外的任何其他格式.

当前在7.x分支中的修复,恢复此行为并继续解析这些附加标记,因此我们不直接支持的那些函数和其他格式将再次起作用.

除此之外,在7.2中,我一直在增加对三星,松下和DJI特定标签的支持,我现在也在研究索尼的具体数据.我们在php.net上有一个错误报告,如果你有兴趣深入研究这个问题,那么它就会引发一切:https://bugs.php.net/bug.php?id = 72735.如果此补丁无法解决您的问题,我们非常欢迎您提交错误报告,以便我们可以考虑解决此问题.

我希望这对您有所帮助,并感谢您帮助PHP变得更大!