我有以下代码,该文件是ajax调用:
try {
echo json_encode(exif_read_data($_POST["url"]));
} catch (Exception $e) {
echo "Invalid URL";
}
其目的是接受图片网址并返回JSON编码的EXIF数据,当有“正确”的网址时,json_encode(exif_read_data($_POST["url"]));
工作正常。
然而,当我故意在 jQuery ajax调用"url" : "url1"
或直接在php文件..exif_read_data("bob")
中传递“坏”网址时,我收到此错误我的控制台日志:
Warning: exif_read_data() [function.exif-read-data]: Unable to open file in ../public_html/_photos/ajax/exif.php on line 3
false
答案 0 :(得分:1)
函数json_encode()如果要将警告作为异常抛出异常,则可以使用set_error_handler()
覆盖默认行为
Here你会找到很好的例子如何做到
答案 1 :(得分:1)
函数exif_read_data($ sUrl)不会抛出异常。
尝试这样做:
$sUrl = $_POST['url'];
if ((isset($sUrl )) AND (file_exists($sUrl)))
{
echo json_encode(exif_read_data($sUrl ));
}
else
{
echo "Invalid URL";
}
答案 2 :(得分:1)
正如Marc在评论中提到的,本机PHP函数不会抛出异常。要正确处理无效的网址,您可以手动验证该文件,然后传递exif_read_data()
数据的内容。
以下是如何实现这一目标的。
// acceptable file extensions
$ext_whitelist = array('jpg', 'jpeg', 'tiff');
// extension for this file name
$extension = strtolower( pathinfo($_POST['url'], PATHINFO_EXTENSION) );
// make sure we will be able to get the exif data
if (!in_array($extension, $ext_whitelist)) {
echo 'Invalid URL';
} else {
$contents = file_get_contents($_POST['url']);
// we couldn't open the file
if ($contents === false) {
echo 'Invalid URL';
} else {
// build the data uri
$uri = "data://image/$extension;base64,". base64_encode($contents);
echo json_encode( exif_read_data($uri) );
}
}