ГЛАВА 7. Файловый ввод/вывод и файловая система
Открытие соединения через сокет
РНР не ограничивается взаимодействием с файлами и процессами — вы также можете устанавливать соединения через сокеты. Сокет(socket) представляет собой программную абстракцию, позволяющую устанавливать связь с различными службами другого компьютера.
fsockopen()
Функция fsockopen() устанавливает сокетное соединение с сервером в Интернете через протокол TCP или UDP.
Синтаксис функции fsockopen():
int fsockopen(string узел, int порт [, int код_ошибки [, string текст_ошибки [, int тайм-аут]]])
Необязательные параметры код_ошибки и текст_ошибки содержат информацию, которая будет выводиться в случае неудачи при подключении к серверу. Оба параметра должны передаваться по ссылке. Третий необязательный параметр, тайм-аут, задает продолжительность ожидания ответа от сервера(в секундах). В листинге 7.6 продемонстрировано применение функции fsockopen() для получения информации о сервере. Однако перед рассмотрением листинга 7.6 необходимо познакомиться еще с одной функцией — socket_set_blocking().
UDP(User Datagram Protocol) — коммуникационный протокол, не ориентированный на соединение.
socket_set_blocking()
Функция socket_set_b1ocking() позволяет установить контроль над тайм-аутом для операций с сервером:
socket_set_blocking(int манипулятор, boolean режим)
Параметр манипулятор задает открытый ранее сокет, а параметр режим выбирает режим, в который переключается сокет(TRUE для блокирующего режима, FALSE для неблокирующего режима). Пример использования функций fsockopen() и socket_set_blocking() приведен в листинге 7.6.
Листинг 7.6. Использование функции fsockopen() для получения информации о сервере
<?
function getthehost($host.$path) {
// Открыть подключение к узлу
$fp - fsockopen($host, 80, &$errno, &$errstr, 30);
// Перейти в блокирующий режим
socket_set_blocking($fp, 1),
// Отправить заголовки
fputs($fp,"GET $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n\r\n"); $x = 1;
// Получить заголовки
while($x < 10) :
$headers = fgets($fp, 4096);
print $headers;
$x++;
endwhile;
// Закрыть манипулятор
fclose($fp);
}
getthehost("www.apress.com", "/");
?>
В результате выполнения листинга 7.6 выводится следующий результат:
НТТР/1.1 200 OK Server: Microsoft-IIS/4.0 Content-location:
http://www.apress.com/0efault.htm Date: Sat. 19 Aug 2000 23:03:25 GMT
Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed. 19 Jul
2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Content-Length: 1311
pfsockopen()
Функция pfsockopen() представляет собой устойчивую(persistent) версию fsockopen(). Это означает, что соединение не будет автоматически разорвано по завершении сценария, в котором была вызвана функция.
Синтаксис функции pfsockopen():
int pfsockopen(string узел, int порт [, int код_ошибки [, string текст _ошибки [, int тайм-аут]]])
В зависимости от конкретных целей вашего приложения может оказаться удобнее использовать pfsockopen() вместо fsockopen().
Назад |
Содержание раздела |
Общее Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|