fsockopen - Открывает соединение с интернет сокетом или доменным сокетом Unix
Вернуться к: Сетевые Функции
fsockopen
(PHP 4, PHP 5, PHP 7)
fsockopen — Открывает соединение с интернет сокетом или доменным сокетом Unix
Описание
$hostname
[, int $port
= -1
[, int &$errno
[, string &$errstr
[, float $timeout
= ini_get("default_socket_timeout")
]]]] )
Устанавливает соединение с сокетом ресурса
hostname
.
PHP поддерживает целевые ресурсы в интернете и Unix доменах в том виде, как они описаны в Список поддерживаемых транспортных протоколов. Список поддерживаемых транспортов можно получить с помощью функции stream_get_transports().
По умолчанию, сокет будет открыт в блокирующем режиме. Переключить его в неблокирующих режим можно функцией stream_set_blocking().
stream_socket_client() выполняет аналогичную функцию, но предоставляет более широкий выбор настроек соединения, включающий установку неблокирующего режима и возможность предоставления потокового контекста.
Список параметров
-
hostname
-
Если установлена поддержка OpenSSL, можно использовать SSL или TLS протоколы соединений поверх TCP/IP при подключении к удаленному хосту. Для этого перед
hostname
нужно добавить префикс ssl:// или tls://. -
port
-
Номер порта. Его можно не указывать, передав -1 для тех протоколов, которые не используют порты, например unix://.
-
errno
-
Если этот параметр предоставить, то в случае ошибки системного вызова функции connect() он будет принимать номер этой ошибки.
Если значение параметра
errno
равно 0, а функция вернулаFALSE
, значит ошибка произошла до вызова connect(). В большинстве случаев это свидетельствует о проблемах при инициализации сокета. -
errstr
-
Сообщение об ошибке в виде строки.
-
timeout
-
Таймаут соединения в секундах.
Замечание:
Если требуется установить таймаут чтения/записи данных через сокет, используйте функцию stream_set_timeout(), так как параметр
timeout
функции fsockopen() ограничивает только время процесса установки соединения с сокетом.
Возвращаемые значения
fsockopen() возвращает файловый указатель, который можно
передавать в функции работающие с файлами (такие как
fgets(), fgetss(),
fwrite(), fclose() и
feof()). Если вызов завершится неудачей, функция вернет
FALSE
.
Ошибки
Вызывает ошибку уровня E_WARNING
, если
hostname
не является допустимым доменом.
Примеры
Пример #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
Вернуться к: Сетевые Функции