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 エラーを PHP の警告としてfile_get_contents報告したくない場合は、ストリーム コンテキストを使用してこれを行うのがクリーンな方法です (そのための特別な方法があります)。

$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

私があなたのことを正しく理解していれば、あなたは への API 呼び出しを行おうとしています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

あなたはcurlを試すかもしれません:

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 に答える