PHP try…捕获失败;捕获;
我有以下代码,该文件是一个ajax调用:PHP try…捕获失败;捕获;,php,json,try-catch,exif,Php,Json,Try Catch,Exif,我有以下代码,该文件是一个ajax调用: try { echo json_encode(exif_read_data($_POST["url"])); } catch (Exception $e) { echo "Invalid URL"; } 其目的是接受图像url并返回JSON编码的EXIF数据,当存在“正确”的url时,JSON_编码(EXIF_读取_数据($_POST[“url”])工作正常 但是,当我在jQueryajax调用“url”:“url1”,或直接在php文
try {
echo json_encode(exif_read_data($_POST["url"]));
} catch (Exception $e) {
echo "Invalid URL";
}
其目的是接受图像url并返回JSON编码的EXIF数据,当存在“正确”的url时,JSON_编码(EXIF_读取_数据($_POST[“url”])代码>工作正常
但是,当我在jQueryajax调用“url”:“url1”
,或直接在php文件。exif\u read\u data(“bob”)
中故意向其传递一个“坏”url时,我在控制台日志中收到以下错误:
Warning: exif_read_data() [function.exif-read-data]: Unable to open file in ../public_html/_photos/ajax/exif.php on line 3
false
函数json_encode()不会抛出异常如果您想将警告作为异常抛出,您可以使用set_error\u handler()
您将找到一个很好的示例,说明如何执行函数exif\u read\u data($sUrl)不会引发异常
尝试这样做:
$sUrl = $_POST['url'];
if ((isset($sUrl )) AND (file_exists($sUrl)))
{
echo json_encode(exif_read_data($sUrl ));
}
else
{
echo "Invalid URL";
}
正如Marc在评论中提到的,本机PHP函数不会抛出异常。要正确处理无效URL,可以手动验证文件,然后传递内容的数据uri
下面是您可以如何实现这一目标的方法
// 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) );
}
}
PHP标准函数不会抛出异常。曾经没有什么可以尝试/抓住的,因为没有什么会被抛出。这也是一个警告,我看不是一个错误,那么有没有办法“捕捉”这些警告?这可能会有帮助-快速/肮脏/丑陋的黑客,使用@
操作符。更好的解决方案:不要试图用php函数直接打开URL。