2012-07-13 86 views
11

以下代码是为我正在建设的大学项目中的一个搜索引擎查询在线词库,但我遇到问题file_get_contents“未能打开流”错误。当我发送一个词时,词库无法识别,它会引发错误。我试图编写一段代码,它将忽略错误,只是在没有这些信息的情况下继续。忽略file_get_contents HTTP包装中的错误?

$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$result_thesaurus=file_get_contents($thesaurus_search); 

我想:

if (file_get_contents($thesaurus_search) != NULL) 
{ // do stuff } 

...但它不工作,因为它仍然会返回某种形式的字符串。

我能做些什么来处理这种情况?

+1

发生错误时返回到什么程度?一些HTML? XML? JSON?你必须解析返回的数据来检查错误代码 - 不太可能api只会返回任何内容。 – 2012-07-13 17:50:22

+0

*“我试图编写一段代码,将忽略错误,只是没有信息就继续”*。如果没有这些信息,你将如何继续? – netcoder 2012-07-13 17:53:02

+0

也许我应该更具体一些,这段代码是班级的一部分,它返回的信息不是终端产品本身的内容,它只是一种奖励。所以如果file_get_contents返回一个错误(因为它没有匹配这个词),我想完全抛弃这个类,并且不返回任何代码。 – shanahobo86 2012-07-13 18:26:42

回答

19

如果你不想做file_get_contents报告HTTP错误为PHP警告,那么这就是做了,使用流上下文干净方式(也有一些是专门为):

$context = stream_context_create(array(
    'http' => array('ignore_errors' => true), 
)); 

$result = file_get_contents('http://your/url', false, $context); 
+0

非常感谢Netcoder,感谢您的帮助。我会停止用扳手击打我的电脑:) – shanahobo86 2012-07-14 10:18:45

+0

非常感谢!我经过很多探索后发现它在手册中,但是对于我来说上下文选项可能有所帮助并不明显。如果这在file_get_contents页面上是正确的,那会很好。 – Errol 2014-02-17 17:38:58

+0

这是一段时间以来令我烦恼的事情之一,但现在一直没有打扰过。 '@'应该可以工作,但不会是愚蠢的。 “** PHP支持一个错误控制操作符:at符号(@)。当在PHP表达式前面加上一个错误控制操作符时,任何可能由该表达式生成的错误消息都将被忽略**”看起来很简单,但是是谎言。 – billynoah 2018-01-31 05:53:18

0

如果我正确理解你,你正在尝试打电话给http://words.bighugelabs.com。 你需要cURL来达到这个目的,所以如果你安装了cURL,那么这段代码就可以为你工作。

$ch = curl_init(); 
$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$options = array(); 
$options[CURLOPT_URL] = $thesaurus_search; 
$options[CURLOPT_RETURNTRANSFER] = true; 
curl_setopt_array($ch, $options); 

// Print result. 
print_r(curl_close($ch)); 
+3

*“你需要cURL来实现这个”*,不,他不。 – netcoder 2012-07-13 18:05:52

1

如果你没事只救助最简单的办法,就是:

if (empty($thesaurus_search)) { 
    return; 
} else { 
    //process with value 
} 

为了更充分地处理它,看着API,它看起来像你应该检查response header如:

$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$result_thesaurus=file_get_contents($thesaurus_search); 
if ($http_response_header[0] = 'HTTP/1.1 200 OK') { 
    //code to handle words 
} else { 
    // do something else? 
} 
+0

考虑到'file_get_contents'在出错时已经返回'false',我不认为这是必要的。 – netcoder 2012-07-13 18:14:37

-1

你可以尝试卷曲:

function curl_get_contents($url) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 2); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $content = curl_exec($ch); 
    curl_close($ch); 
    return $content; 
}