РНР
не ограничивается взаимодействием с файлами и процессами - вы также можете устанавливать
соединения через сокеты. Сокет (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_b1ocki ng(
) позволяет установить контроль над тайм-аутом для операций с сервером: 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( ). |