使用try catch块无法捕获PHP file_get_contents错误

时间:2018-06-29 06:38:53

标签: php error-handling

我正在尝试使用file_get_contents函数来获取图像,但是会出现错误。为了处理错误,我使用了try catch块,但它没有捕获错误,但失败了。

我的代码:

try {
     $url = 'http://wxdex.ocm/pdd.jpg'; //dummy url
     $file_content = file_get_contents($url);
}
catch(Exception $e) {
     echo 'Error Caught';           
}

错误:

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: No such host is known
Warning: file_get_contents(http://wxdex.ocm/pdd.jpg): failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known.

注意::我能够在远程获取其他任何有效的图片网址。

3 个答案:

答案 0 :(得分:3)

$filtered = DB::table('tmp_table')->distinct()->select('type','description','note')->get()->toArray(); $to_fill = []; foreach($filtered as $record) { $to_fill[] = (array)$record; } DB::table('tmp_other')->insert($to_fill); 不起作用,因为try/catch不是warning

您可以尝试使用此代码,以便也可以捕获警告。

exception

答案 1 :(得分:0)

以下是替代方法,只需要检查数据,否则可以抛出异常来处理它。与设置新的错误处理程序相比,它会更安全

try {
    $url = 'http://wxdex.ocm/pdd.jpg';
    $file_content = file_get_contents($url);
    if(empty($file_content)){
       throw new Exception("failed to open stream ", 1);
    }else{
       echo "File is loaded and content is there";
     }

} catch (Exception $e) {
   echo 'Error Caught'; 
}

答案 2 :(得分:0)

使用get header函数检查URL之前是否存在

$url = 'http://wxdex.ocm/pdd.jpg';
$file_headers = @get_headers($url);

if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found' ||trim($file_headers[0]) == 'HTTP/1.1 403 Forbidden') {
    $exists = false;
}else{
    $exists = true;
}
if($exists===true){

    $file_content = file_get_contents($url);
}