Когда я вызываю http_get, он никогда не возвращается, моя веб-страница просто перестает выводиться в этот момент. Целевой URL никогда не получает запрос.
<?php //simplest test of http_get I could make
print "http://kayaker.net/php/image.php?id=ORCS084144<br>";
http_get ("http://kayaker.net/php/image.php?id=ORCS084144");
print "<br>back from http_get<br>";
?>
Оригинальный сценарий звонил http_get
в цикле для отправки данных нескольким другим процессам на другом сервере.
Цикл останавливается при первом вызове http_get
, Я попытался вызвать flush (); после каждой напечатанной строки радости нет. Я пытался установить более длительные таймауты в $options
параметр для http_get
, это не помогло. Я пробовал звонить http_request
с HTTP_METH_GET
в первом аргументе та же проблема.
Этот URL каякера не является оригинальным, просто более короткий пример, который все еще не работает. Я взял один из исходных URL-адресов и вставил его в адресную строку браузера, он работал нормально. Я вставил некоторые оригинальные URL-адреса в другой язык сценариев (функция llHTTPRequest в LSL в Open Simulator), и они отлично работают оттуда.
Я хранил программу выше в месте где вы можете запустить его из браузера и увидеть, что это не удалось.
Я вставил URL-адрес вышеупомянутой программы в другой язык сценариев, который по крайней мере возвратил статус ошибки (500) и сообщение «Внутренняя ошибка сервера», что, вероятно, означает, что тестовая программа не завершилась должным образом.
Должно быть, я делаю что-то очень простое, глупое и в основном неправильное.
Но что это?
проблема
У вас, похоже, не установлен правильный пакет (PECL pecl_http> = 0.1.0).
Fatal error: Call to undefined function http_get() in [snip] on line 8
Решение
Вы также можете
установите pecl_http, как описано в документация.
используйте другую функцию, указанную в комментариях (file_get_contents, curl)
Благодаря приведенным выше комментариям и удивительно полезным людям из моей веб-хостинговой компании мне удалось написать следующую функцию:
function http_get($url)
{
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
$result = curl_exec($ch); // run the whole process
curl_close($ch);
return($result);
} //http_get
Это работает для многих разных URL, но на некоторых серверах происходит сбой, я надеюсь, поиграв с опциями, которые я могу заставить его работать там.