Подтвердить что ты не робот

Игнорирование ошибок в HTTP-оболочке file_get_contents?

Следующий код предназначен для запроса онлайн-тезауруса для поисковой системы, которую я создаю как проект колледжа, но у меня возникают проблемы с ошибками 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 }

... но не работает, потому что он все еще возвращает какую-то строку.

Что я могу сделать для обработки таких случаев?

4b9b3361

Ответ 1

Если вы не хотите, чтобы file_get_contents сообщал HTTP-ошибки в качестве предупреждений PHP, это способ clean сделать это, используя контекст потока (для этого есть что-то особенное):

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

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

Ответ 2

Самое простое решение, если вы справитесь с просто спасением, будет:

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

Ответ 3

Если я правильно вас понимаю, вы пытаетесь сделать вызов 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));

Ответ 4

Вы можете попробовать закрутить:

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