从iPhone上传的图像包含exif数据

我已经建立了一个允许上传图片的网站,一旦上传了图片,就会显示一些关于图片的特定信息。
从电脑上传图片效果很好,当我试图从智能手机上传图片时,问题就出现了。上传成功,但似乎从计算机上传时显示的数据的主要部分现在丢失了

此代码部分是实际检索和显示数据的部分:

$location=$\u文件[“pic”][“tmp\u名称”];
$data=exif\u read\u data($location);
var_dump($数据);

var\u dump($data)实际上在计算机和智能手机中转储不同的数据

显然,它在安卓智能手机上运行良好,只有当我尝试从iPhone上传图像时,问题才会出现

例如,var\u dump计算机上传:

数组(49){
[“FileName”]=>字符串(10)“php2D4.tmp”
[“FileDateTime”]=>int(1367318152)
[“文件大小”]=>int(30357)
[“文件类型”]=>int(2)
[“MimeType”]=>字符串(10)“图像/jpeg”
[“SectionsFound”]=>字符串(24)“任意标签,IFD0,EXIF,GPS”
[“计算的”]=>数组(6){
[“html”]=>字符串(24)“width=“320”height=“240”
[“高度”]=>整数(240)
[“宽度”]=>整数(320)
[“IsColor”]=>int(1)
[“ByteOrderMotorola”]=>int(1)
[“光圈编号”]=>字符串(5)“f/2.8”
}  
[“Make”]=>字符串(5)“Apple”
[“型号”]=>字符串(8)“iPhone 4”
[“方向”]=>int(3)
[“XResolution”]=>字符串(4)“72/1”
[“YResolution”]=>字符串(4)“72/1”
[“ResolutionUnit”]=>int(2)
[“软件”]=>字符串(5)“6.1.3”
[“日期时间”]=>字符串(19)“2013:04:26 23:57:43”
[“YCbCrPositioning”]=>int(1)
[“Exif\u IFD\u指针”]=>int(204)
[“GPS\U IFD\U指针”]=>int(594)
[“曝光时间”]=>字符串(4)“1/15”
[“FNumber”]=>字符串(4)“14/5”
[“ExposureProgram”]=>int(2)
[“ISOSpeedRatings”]=>int(1000)
[“ExifVersion”]=>字符串(4)“0221”
[“DateTimeOriginal”]=>字符串(19)“2013:04:26 23:57:43”
[“DateTimeDigized”]=>字符串(19)“2013:04:26 23:57:43”
[“组件配置”]=>字符串(4)”
[“ShutterSpeedValue”]=>字符串(9)“4889/1250”
[“光圈值”]=>字符串(9)“4281/1441”
[“BrightnessValue”]=>字符串(10)“-3581/1451”
[“计量模式”]=>整数(5)
[“Flash”]=>int(24)
[“焦点长度”]=>字符串(5)“77/20”
[“SubjectLocation”]=>数组(4){
[0]=>整数(1295)
[1] =>int(967)
[2] =>整数(699)
[3] =>整数(696)
} 
[“FlashPixVersion”]=>字符串(4)“0100”
[“颜色空间”]=>int(1)
[“ExifImageWidth”]=>int(2592)
[“ExifImageLength”]=>int(1936年)
[“SensingMethod”]=>int(2)
[“ExposureMode”]=>int(0)
[“白平衡”]=>整数(0)
[“聚焦长度为35mm胶片”]=>int(35)
[“SceneCaptureType”]=>int(0)
[“GPSLatitudeRef”]=>字符串(1)“N”
[“GPSLatitude”]=>数组(3){
[0]=>字符串(4)“31/1”
[1] =>字符串(8)“5854/100”
[2] =>字符串(3)“0/1”
} 
[“gpslngituderef”]=>字符串(1)“E”
[“GPSLongitude”]=>数组(3){
[0]=>字符串(4)“34/1”
[1] =>字符串(8)“4684/100”
[2] =>字符串(3)“0/1”
} 
[“GPSTimeStamp”]=>数组(3){
[0]=>字符串(4)“20/1”
[1] =>字符串(4)“57/1”
[2] =>字符串(8)“4272/100”
} 
[“GPSImgDirectionRef”]=>字符串(1)“T”
[“GPSImgDirection”]=>字符串(9)“48089/465”
}

var\u dump从智能手机上传:

数组(12){
[“文件名”]=>字符串(9)“phpSzwfPw”
[“FileDateTime”]=>int(1367318054)
[“文件大小”]=>int(1778041)
[“文件类型”]=>int(2)
[“MimeType”]=>字符串(10)“图像/jpeg”
[“SectionsFound”]=>字符串(19)“任意标记,如果0,则退出”
[“计算的”]=>数组(5){
[“html”]=>字符串(26)“width=“2592”height=“1936”
[“高度”]=>整数(1936年)
[“宽度”]=>整数(2592)
[“IsColor”]=>int(1)
[“ByteOrderMotorola”]=>int(1)
} 
[“方向”]=>int(3)
[“Exif\u IFD\u指针”]=>int(38)
[“颜色空间”]=>int(1)
[“ExifImageWidth”]=>int(2592)
[“ExifImageLength”]=>int(1936年)
}

这是计算机变量转储($\u文件)

数组(1)
{[“pic”]=>数组(5)
{[“name”]=>字符串(18)leaf2.JPG“
[“键入”]=>字符串(10)“图像/jpeg”
[“tmp_name”]=>字符串(14)“/tmp/phpzeDUs9”
[“错误”]=>整数(0)
[“大小”]=>int(46439)}

以下是iPhone的结果var\u转储($\u文件)

数组(1){[“pic”]=>数组(5)
{[“name”]=>字符串(9)“image.jpg”
[“键入”]=>字符串(10)“图像/jpeg”
[“tmp_name”]=>字符串(14)”/tmp/phplPUZky
[“error”]=>int(0)[“size”]=>int(1455577)}

编辑:这是上传表单的HTML代码:

<form action=“results.php”id=“upload image”method=“post”enctype=“multipart/form data”>
<div class=“fileupload fileupload new”数据提供=“fileupload”>
<div class=“文件上载预览缩略图”style=“宽度:200px;高度:150像素;“></div>
<div>
<span class=“btn btn file”><span class=“fileupload new”>选择图像</span><span class=“fileupload exists”>更改</span><输入类型=“file”name=“pic”id=“pic”accept=“image/*”/></span>
<a href=”“class=“btn fileupload exists”数据解除=“fileupload”>删除</a>
<button type=“submit”class=“btn”>上传</button>
</br>
<span class=“上传错误”>lt;/span>
</div>
</form>

是什么引起的

问题

iphone(ipad等,从现在起我就叫它iphone)剥离exif数据是正确的。这也不是iphone上的错误,而是一个功能

android用户不喜欢iphone和iphone用户不喜欢androids的一个主要原因是,iphone非常有限(在更改、更改等自由度方面)。你不能只运行下载的应用程序,访问设置的权限有限等等

这是因为苹果的战略是创造一个故障安全产品,“如果你不能做奇怪的事情,奇怪的事情就不会发生“。它试图以一切可以想象的方式保护用户。它还可以在上载图像时保护用户。在exif中,可能存在会损害用户隐私的数据。比如GPS坐标,但即使是时间戳也会伤害用户(想象一下,你上传了一张带有时间戳的海滩照片,从你向老板报告生病的那一刻起)

因此,基本上剥离所有exif数据是一种安全措施。我和其他很多人都不同意这一策略,但不幸的是,我们对此无能为力

解决方案

更新:这不起作用。(感谢likeitlikeit提供此信息)

幸运的是,你可以绕过这个问题。Javascript起到了拯救作用。使用javascript,您可以读取exif数据,并通过添加一些额外的POST数据将其与照片一起发送

请注意:此解决方案由另一位开发人员向我提供,尚未测试

来源

你在寻求可靠的消息来源。不幸的是,他们很难找到,因为苹果并没有像往常一样说话,所以我所有的信息都是道听途说

也许我能提供的一个更可靠的消息来源是flickr的一名工作人员,他确认根本原因是移动safari剥离了exif。
http://www.flickr.com/help/forum/en-us/72157632100391901/#reply72157632135956813

发表评论