РНР не ограничивается взаимодействием с файлами и процессами — вы также можете устанавливать соединения через сокеты. Сокет (socket) представляет собой программную абстракцию, позволяющую устанавливать связь с различными службами другого компьютера.
fsockopen( )
Функция fsockopen( ) устанавливает сокетное соединение с сервером в Интернете
через протокол TCP или UDP. Синтаксис функции fsockopen( ):
int fsockopen (string узел, int порт [, int код_ошибки [, string текст_ошибки [, int тайм-аут]]])
Необязательные параметры код_ошибки и текст_ошибки содержат информацию, которая будет выводиться в случае неудачи при подключении к серверу. Оба параметра должны передаваться по ссылке. Третий необязательный параметр, тайм-аут, задает продолжительность ожидания ответа от сервера (в секундах). В листинге 7.6 продемонстрировано применение функции fsockopen( ) для получения информации о сервере. Однако перед рассмотрением листинга 7.6 необходимо познакомиться еще с одной функцией — socket_set_blocking( ).

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) :