14

以下代码用于查询我作为大学项目正在构建的搜索引擎的在线词库,但我遇到了file_get_contents “无法打开流”错误的问题。当我发送词库无法识别的单词时,它会引发错误。我正在尝试编写一段代码,该代码将忽略错误并在没有信息的情况下继续进行。

$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 }

...但它不起作用,因为它仍然返回某种字符串。

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

4

4 回答 4

49

如果您不想将HTTP 错误file_get_contents报告为 PHP 警告,那么这是一种干净的方法,使用流上下文(有专门的东西):

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

$result = file_get_contents('http://your/url', false, $context);
于 2012-07-14T00:32:13.543 回答
1

如果您可以接受救助,最简单的解决方案是:

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

为了更全面地处理它,查看API,看起来您应该检查响应标头,例如:

$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?
}
于 2012-07-13T18:12:03.867 回答
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));
于 2012-07-13T18:05:23.840 回答
-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;
}
于 2012-07-13T18:57:57.253 回答