如果失败,请忽略file_get_contents

时间:2014-04-01 07:17:07

标签: php

我使用网站吸引用户'国家的IP地址,但该网站昨天停了一段时间,给我带来了很多问题。

如果file_get_contents()失败,我怎能 IGNORE

这就是我正在尝试的但是它不起作用,如果它不起作用仍然打嗝:

if($details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"))){
    $country =  $details->country;  
}

我已经看到其他答案,说关闭错误报告对我来说是一个坏的,坏的,坏的想法。

是否有更好的方法或更好的方式从IP地址获取国家/地区代码?

4 个答案:

答案 0 :(得分:3)

您可以将stream contextignore_errors选项一起使用。

$context = stream_context_create(array('http' => array('ignore_errors' => true)));
$json = file_get_contents("http://ipinfo.io/{$ip}", false, $context);

此处的奖励是您还可以看到该网站发回给您的错误消息。

答案 1 :(得分:0)

我认为这段代码应该没问题:

try{
  if($details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"))){
    $country =  $details->country;  
  }
} catch( Exception $e )
{
  //log or whatever you want
}

答案 2 :(得分:0)

if (($cont = file_get_contents("http://ipinfo.io/{$ip}")) && is_object($details = json_decode($cont))) {
    $country =  $details->country;
}

答案 3 :(得分:-1)

file_get_contents失败时返回false。

$country = "Unknown";
if(false !== ($details = json_decode(@file_get_contents("http://ipinfo.io/{$ip}")))){
    $country = $details->country;
}
if($country !== "Unknown"){
    // here you go
}