Игнорирование ошибок в 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 }
... но он не работает, потому что он все еще возвращает какую-то строку.
Что я могу сделать, чтобы справиться с такими случаями?
4 ответа
Если не хочешь file_get_contents
чтобы сообщать об ошибках HTTP в виде предупреждений PHP, тогда это чистый способ сделать это, используя потоковый контекст (есть что-то специально для этого):
$context = stream_context_create(array(
'http' => array('ignore_errors' => true),
));
$result = file_get_contents('http://your/url', false, $context);
Самое простое решение, если у вас все в порядке с выходом из кризиса, было бы:
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?
}
Если я вас правильно понимаю, вы пытаетесь сделать вызов 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));
Вы можете попробовать 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;
}