通过手机拍照上传时,Exif数据被截断


Exif data being truncated when taking a photo via phone to upload

我不明白为什么在php中使用Exif,当通过在iPhone 6plus和三星Android上选择"现有照片"上传图像时,我会得到完整的Exif数据,其中包括所有数据,包括GPS数据;但当我选择"拍照",然后通过相同的过程上传时,Exif数据会被截断,我再也无法获得即将结束的GPS数据。它在"…ExifImageLength"]=>int(2448)"末尾停止。

这是我正在使用的脚本(这是一个更大脚本的一部分,用于调整上传图像的大小,并存储表单中的数据和上传图像的Exif数据。但我只使用下面的代码作为测试,它仍然可以。

if (empty($_FILES['image']['name'])) {
        echo 'Please choose an image!';
}   else {
     $temp = $_FILES['image']['tmp_name'];
     $info = @exif_read_data($temp);
     var_dump($info);
 }

我有一个使用XAMPP的本地开发服务器,在那里,"拍摄"或"选择"的图像都很好。但我在GoDaddy虚拟服务器Linux上遇到了这个被截断的问题。

经过长期的研究,我发现当有人在将照片上传到网站时选择"拍照"时,只存储基本的EXIF数据,而不存储GPS数据等附加数据。当他们"从库中选择"时,数据与照片一起存储,因为照片已经拍摄并存储在移动设备上。我注意到,当他们在点击网站的"选择图像"表单输入后拍照时,照片不会保存到移动设备上,显然这就是为什么额外的数据不会被记录下来的原因。只有当他们拍摄照片并将其存储在移动设备上时,才会存储额外的EXIF数据,而不是当他们绕过该数据并直接上传到网站时。我甚至将照片原封不动地存储到服务器上,然后运行额外EXIF的脚本,但没有记录这样的信息。我在很多其他网站上测试过这一点,这些网站将允许您上传以获取照片的地图坐标,截断的结果与它们以及我创建的脚本一致。我需要纠正,但经过大量研究,这是我通过实验得出的唯一结论。到目前为止,除了我的建议,我找不到其他解释。我将把这作为对我自己问题的回答,并欢迎任何比我更专业的人反驳或肯定。