fsockopen
(PHP 4, PHP 5, PHP 7)
fsockopen — Открывает соединение с интернет-сокетом или доменным сокетом Unix
Описание
$hostname
, int $port
= -1
, int &$error_code
= null
, string &$error_message
= null
, float|null $timeout
= null
) : resource|false
Устанавливает соединение с сокетом ресурса
hostname
.
PHP поддерживает целевые ресурсы в интернете и Unix-доменах в том виде, как они описаны в Список поддерживаемых транспортных протоколов. Список поддерживаемых транспортов можно получить с помощью функции stream_get_transports().
По умолчанию сокет будет открыт в блокирующем режиме. Переключить его в неблокирующих режим можно функцией stream_set_blocking().
stream_socket_client() выполняет аналогичную функцию, но предоставляет более широкий выбор настроек соединения, включающий установку неблокирующего режима и возможность предоставления потокового контекста.
Список параметров
-
hostname
-
Если установлена поддержка OpenSSL, можно использовать SSL- или TLS-протоколы соединений поверх TCP/IP при подключении к удаленному хосту. Для этого перед
hostname
нужно добавить префиксssl://
илиtls://
. -
port
-
Номер порта. Его можно не указывать, передав
-1
для тех протоколов, которые не используют порты, напримерunix://
. -
error_code
-
Если этот параметр предоставить, то в случае ошибки системного вызова функции
connect()
он будет принимать номер этой ошибки.Если значение параметра
error_code
равно0
, а функция вернулаfalse
, значит ошибка произошла до вызоваconnect()
. В большинстве случаев это свидетельствует о проблемах при инициализации сокета. -
error_message
-
Сообщение об ошибке в виде строки.
-
timeout
-
Тайм-аут соединения в секундах.
Замечание:
Если требуется установить тайм-аут чтения/записи данных через сокет, используйте функцию stream_set_timeout(), т.к. параметр
timeout
функции fsockopen() ограничивает только время процесса установки соединения с сокетом.
Возвращаемые значения
fsockopen() возвращает файловый указатель, который можно
использовать с функциями, работающие с файлами (такие как
fgets(), fgetss(),
fwrite(), fclose() и
feof()). Если вызов завершится неудачно, функция вернет
false
.
Ошибки
Вызывает ошибку уровня E_WARNING
, если
hostname
не является допустимым доменом.
Список изменений
Версия | Описание |
---|---|
8.0.0 |
timeout теперь допускает значение null.
|
Примеры
Пример #1 Пример использования fsockopen()
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Пример #2 Использование UDP-соединения
Пример ниже демонстрирует, как получить день и время от UDP-службы "daytime" (порт 13) на вашей машине.
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
Примечания
Замечание:
В зависимости от окружения, Unix-домен или тайм-аут установки подключения могут оказаться недоступными.
Иногда UDP-сокеты получают статус открытых, даже если удаленный хост недоступен. Ошибка проявит себя только во время чтения или записи данных в/из этого сокета. Причина этого заключается в том, что протокол UDP передает данные без установки соединения, а это означает, что операционная система не устанавливает и не держит соединение с сокетом, пока не начнется передача данных.
Замечание: При указании числового адреса IPv6 (например,
fe80::1
) вы должны заключать его в квадратные скобки. Например,tcp://[fe80::1]:80
.
Смотрите также
- pfsockopen() - Открывает постоянное соединение с интернет-сокетом или доменным сокетом Unix
- stream_socket_client() - Открыть соединение с интернет-сокетом или с доменным сокетом Unix
- stream_set_blocking() - Установить блокирующий/неблокирующий режим в потоке
- stream_set_timeout() - Установить значение тайм-аута для потока
- fgets() - Читает строку из файла
- fgetss() - Читает строку из файла и удаляет HTML-теги
- fwrite() - Бинарно-безопасная запись в файл
- fclose() - Закрывает открытый дескриптор файла
- feof() - Проверяет, достигнут ли конец файла
- socket_connect() - Начинает соединение с сокетом
- Расширение Curl