无法从PHP中获取大型文件的Img2Json API的JSON数据

时间:2013-11-16 01:32:29

标签: php mysql json amazon-s3

我正在使用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/olympus-c960.jpg

两个失败:http://img2json.appspot.com/go/?callback=hello&url=http://cloudousmain.s3.amazonaws.com/54img.JPG

http://img2json.appspot.com/go/?callback=hello&url=http://cloudousmain.s3.amazonaws.com/IMG_20130329_120227.jpg

我增加了ini文件中的内存但没有成功。此外,值得注意的是,在处理图像时,会显示进度条,直到完成(或应该完成)。有什么想法吗?

编辑:切换到curl并使用var_dump显示“不工作”的图像正在转储为NULL,而那些工作正常的图像会按预期为我提供一组Exif数据。

2 个答案:

答案 0 :(得分:1)

看起来这是一个AWS错误,它是用XML编写的,无法解析EXIF数据。当我尝试在浏览器中查看坏图像时,我收到“拒绝访问”,但好的图像显示图像。

要在代码中检查此项,请ping图像文件的标头,并检查内容类型是application/xml还是http代码是403.我建议使用http_head()或在CURLOPT_HEADER中标记curl_setopt()以获取此信息。

答案 1 :(得分:0)

当JSON为NULL时,我最终默认为PHP的Exif函数。不是我想做的,但它奏效了。