(PHP 5, PHP 7, PHP 8)
stream_socket_client — Открывает соединение с интернет-сокетом или с доменным Unix-сокетом
$address
,&$error_code
= null
,&$error_message
= null
,$timeout
= null
,$flags
= STREAM_CLIENT_CONNECT
,$context
= null
Функция начинает соединение потока или датаграммы с удалённым сокетом, который указали
в параметре address
. Тип создаваемого сокета
определяется по транспорту, который указали через стандартное форматирование URL-адреса:
transport://target
. Для сокетов интернет-домена
(AF_INET) наподобие TCP и UDP часть target
параметра address
должна состоять из
имени хоста или IP-адреса, за которым следует двоеточие и номер порта. Для доменных
сокетов Unix часть target
должна указывать на
файл сокета в файловой системе.
Замечание:
По умолчанию поток будет открыт в блокирующем режиме. Можно переключить поток в неблокирующий режим функцией stream_set_blocking().
address
Адрес удалённого сокета для соединения.
error_code
При сбое соединения функция присвоит параметру номер системной ошибки.
error_message
При сбое соединения функция присвоит параметру сообщение о системной ошибке.
timeout
Число секунд, в течение которых должно произойти время ожидания системного
вызова connect()
. По умолчанию используется значение директивы
default_socket_timeout.
Замечание: Этот параметр применяется, только если попытки асинхронного подключения не предпринимаются.
Замечание:
Чтобы указать время ожидания для чтения или записи данных через сокет, вызывают функцию stream_set_timeout(), поскольку параметр
timeout
применяется только при создании соединения через сокет.
flags
Поле битовой маски, которое может принимать значение любой комбинации флагов соединения.
Пока набор флагов соединения ограничен следующими значениями:
STREAM_CLIENT_CONNECT
(по умолчанию),
STREAM_CLIENT_ASYNC_CONNECT
и STREAM_CLIENT_PERSISTENT
.
context
Допустимый ресурс контекста, который создали функцией stream_context_create().
В случае успешного выполнения функция возвращает ресурс потока, который можно
использовать с другими файловыми функциями (например,
fgets(), fgetss(),
fwrite(), fclose()
и feof()); если возникла ошибка, функция возвращает false
.
В случае неудачного вызова функция заполнит параметры error_code
и error_message
системной ошибкой,
которая произошла при системном вызове
connect()
. Если значение, которое вернулось в параметре
error_code
, равно 0
и функция
вернула значение false
, это означает, что ошибка
произошла до вызова connect()
. Это произошло,
вероятно, из-за проблемы инициализации сокета. Примите во внимание,
что параметры error_code
и error_message
каждый раз будут передаваться по ссылке.
Версия | Описание |
---|---|
8.0.0 |
Параметры timeout и context теперь принимают значение null.
|
Пример #1 Пример использования функции stream_socket_client()
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
Пример #2 Пример UDP-соединения
Получения дня и времени от UDP-службы daytime (порт 13) на localhost.
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
echo "ОШИБКА: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
UDP-сокеты иногда открываются без ошибки, даже если удалённый хост недоступен. Ошибка станет заметной, только когда данные будут читать из сокета или писать данные в сокет. Причина этого в том, что UDP — протокол без соединения, что означает, что операционная система не пытается установить соединение с сокетом, пока ей в действительности не нужно отправить или получить данные.
Замечание: Числовые IPv6-адреса наподобие
fe80::1
берут в квадратные скобки. Например:tcp://[fe80::1]:80
.
Замечание:
В зависимости от окружения Unix-домены или произвольное время ожидания соединения могут быть недоступны. Список доступных транспортов можно получить функцией stream_get_transports(). Смотрите список встроенных транспортов на странице Список транспортных протоколов для работы с сокетами.