Albert22
Старатель
- Регистрация
- 30 Мар 2008
- Сообщения
- 270
- Реакции
- 11
- Автор темы
- #1
Привет
Есть необходимость определить статус потока с Icecast (online/offline). Если поток онлайн, то get_headers(); вполне хватает, однако если с ним вдруг что, то get_headers(); начинает жутко тормозить пока не наступит неведомый таймаут. Решил использовать сокеты:
В функцию передаётся нечто вроде Для просмотра ссылки Войди или Зарегистрируйся. Скажите, когда в ответе функции содержится 200 ОК (а значит всё работает и получено), я не рискую оставить считывание «включенным»? Запрос ведь используется GET, HEAD не работает (400 Bad Request сокетами и curl'ом). То есть, по завершении скрипт не продолжит загрузку данных? Или fclose(); всё решает?
Есть необходимость определить статус потока с Icecast (online/offline). Если поток онлайн, то get_headers(); вполне хватает, однако если с ним вдруг что, то get_headers(); начинает жутко тормозить пока не наступит неведомый таймаут. Решил использовать сокеты:
PHP:
function getHeaders($addr) {
$addr=str_replace('http://', '', $addr);
$url['path']=explode('/', $addr);
$url['host']=explode(':', $url['path'][0]);
$fp = @fsockopen($url['host'][0], $url['host'][1], $errno, $errstr, 3);
if (!$fp) {
echo "Unable to open\n";
} else {
fwrite($fp, "GET /".$url['path'][1]." HTTP/1.0\r\n\r\n");
stream_set_timeout($fp, 2);
$res = fread($fp, 20);
fclose($fp);
return $res;
}
}
}