Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP try…捕获失败;捕获;_Php_Json_Try Catch_Exif - Fatal编程技术网

PHP try…捕获失败;捕获;

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文

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