PHP应用程序将在Google App Engine上运行。它应该能够从用户上传的照片中读取EXIF信息,尤其是相机品牌和型号,f值,焦距,GPS坐标等。
当脚本尝试直接从上传的文件中读取EXIF时,如下所示:
done
结果如下:
本地PHP服务器(PHP 7.1.9) - 确定
Google Cloud SDK (182.0.0,PHP 5.5.26)
$exif = exif_read_data($_FILES['file']['tmp_name']);
Google App Engine (PHP 5.5.38)
Warning: exif_read_data(0): Error reading from file: got=x3FFA(=16378) != itemlen-2=xF2A8(=62120) in D:\project\upload.php on line 5
Warning: exif_read_data(0): Invalid JPEG file in D:\project\upload.php on line 5
我怀疑这与Google将上传文件存储在虚拟文件系统中的方式有关(tmp_name为PHP Warning: exif_read_data(0): Error reading from file: got=x3FFA(=16378) != itemlen-2=xF2A8(=62120) in /base/data/home/apps/e~project/20171226t213042.406490485858874687/upload.php on line 5
PHP Warning: exif_read_data(0): Invalid JPEG file in /base/data/home/apps/e~project/20171226t213042.406490485858874687/upload.php on line 5
)。
当我将上传的照片移动到GS存储桶然后尝试从那里读取EXIF时:
vfs://root/uploads/0
结果如下:
Google Cloud SDK
use google\appengine\api\cloud_storage\CloudStorageTools;
$bucket = CloudStorageTools::getDefaultGoogleStorageBucketName();
$name = $_FILES['file']['name'];
$tmp_name = $_FILES['file']['tmp_name'];
$file_path = 'gs://' . $bucket . '/' . $name;
move_uploaded_file($tmp_name, $file_path);
$serving_url = CloudStorageTools::getImageServingUrl($file_path);
$exif_raw = exif_read_data($serving_url);
Google App Engine - 可以读取EXIF,但似乎只有FILE和COMPUTED部分可用;缺少包含相机相关信息的IFD0或EXIF部分的信息。
该应用如何在本地开发服务器和Google App Engine上读取EXIF(包括IFD0部分)?