PHP尝试...抓住失败"赶上"

时间:2014-05-27 19:10:29

标签: php json try-catch exif

我有以下代码,该文件是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

3 个答案:

答案 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) );
    }
}