Сетевые Функции
PHP Manual

fsockopen

(PHP 4, PHP 5)

fsockopen Открывет соединение с интернет сокетом или доменным сокетом Unix

Описание

resource fsockopen ( string $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

Номер порта.

errno

Если этот параметр предоставить, то в случае ошибки системного вызова функции connect() он будет принимать номер этой ошибки.

Если значение параметра errno равно 0, а функция вернула FALSE, значит ошибка произошла до вызова connect(). В большинстве случаев это свидетельствует о проблемах при инициализации сокета.

errstr

Сообщение об ошибке в виде строки.

timeout

Таймаут соединения в секундах.

Замечание:

Если требуется установить таймаут чтения/записи данных через сокет, используйте фукнцию stream_set_timeout(), так как параметр timeout фукнции fsockopen() ограничивает только время процесса установки соединения с сокетом.

Возвращаемые значения

fsockopen() возвращает файловый указатель, который можно передавать в функции работающие с файлами (такие как fgets(), fgetss(), fwrite(), fclose() и feof()). Если вызов завершится неудачей, функция вернет FALSE.

Ошибки

Вызывает ошибку уровня E_WARNING, если hostname не является допустимым доменом.

Список изменений

Версия Описание
4.3.0 Добавлена поддержка параметра timeout на платформах win32.
4.3.0 Добавлена поддержка SSL и TLS поверх TCP/IP.

Примеры

Пример #1 Пример использования fsockopen()

<?php
$fp 
fsockopen("www.example.com"80$errno$errstr30);
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($fp128);
    }
    
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($fp26);
    
fclose($fp);
}
?>

Примечания

Замечание:

В зависимости от окружения, Unix домен или таймаут установки подключения могут оказаться недоступными.

Внимание

Иногда UDP сокеты получают статус открытых, даже если удаленный хост недоступен. Ошибка проявит себя только во время чтения или записи данных в/из этого сокета. Причиной этому служит тот факт, что протокол UDP передает данные без установки соединения. То есть операционная система не устанавливает и не держит соединение с сокетом, пока не начнется передача данных.

Замечание: При указании числового адреса IPv6 (например, fe80::1) вы должны заключать его в квадратные скобки. Например, tcp://[fe80::1]:80.

Смотрите также


Сетевые Функции
PHP Manual