我正在使用http://img2json.appspot.com/检索并存储用户上传图片的Exif数据。我注意到对于较小的文件,事情很有效。对于较大的文件或具有大量Exif数据的文件,存储文件但不存储Exif数据。我不知道这是因为服务花了很长时间来生成JSON,或者因为我将所有JSON存储在PHP数组中而存在内存问题。
我检索用户上传图片的Exif数据的代码如下:
$exifd = file_get_contents("http://img2json.appspot.com/go/url=http://myURL.com/$fileName");
$response = json_decode($exifd, true);
$shut = $response['exif']['ShutterSpeedValue'];
$iso = $response['exif']['ISOSpeedRatings'];
$dateTime = $response['exif']['DateTime'];
$aperture = $response['exif']['ApertureValue'];
$focalLength = $response['exif']['FocalLength'];
$make = $response['exif']['Make'];
$model = $response['exif']['Model'];
$software = $response['exif']['Software'];
$flash = $response['exif']['Flash'];
$sql="INSERT INTO EXIF (uniqueID, dateTime, aperture, focalLength, make, model, software, shutterSpeed, ISO, flash)
VALUES('$id', '$dateTime', '$aperture', '$focalLength', '$make', '$model', '$software', '$shut', '$iso', '$flash')";
if (!mysql_query($sql,$link))
{
die('Error: ' . mysql_error());
}
}else{
echo "Something went wrong while uploading your file... sorry.";
}
正如我之前提到的,这在大多数情况下都很有效,但它不适用于大文件(大小或大数量的Exif数据),并且这里和那里的小文件也会失败。
两个失败:http://img2json.appspot.com/go/?callback=hello&url=http://cloudousmain.s3.amazonaws.com/54img.JPG
和
我增加了ini文件中的内存但没有成功。此外,值得注意的是,在处理图像时,会显示进度条,直到完成(或应该完成)。有什么想法吗?
编辑:切换到curl并使用var_dump显示“不工作”的图像正在转储为NULL,而那些工作正常的图像会按预期为我提供一组Exif数据。
答案 0 :(得分:1)
看起来这是一个AWS错误,它是用XML编写的,无法解析EXIF数据。当我尝试在浏览器中查看坏图像时,我收到“拒绝访问”,但好的图像显示图像。
失败:http://cloudousmain.s3.amazonaws.com/54img.JPG
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>2537951DEE216FEB</RequestId>
<HostId>Ep4//A7Oq+n/C3ilB5jyazx0Bs9fQfMRyNg+pX/rs+dkziFhJIkgHNWHc+CAZVgR</HostId>
</Error>
要在代码中检查此项,请ping图像文件的标头,并检查内容类型是application/xml
还是http代码是403.我建议使用http_head()
或在CURLOPT_HEADER
中标记curl_setopt()
以获取此信息。
答案 1 :(得分:0)
当JSON为NULL时,我最终默认为PHP的Exif函数。不是我想做的,但它奏效了。