Функция PHP fsockopen(): всё, что нужно знать
Как PHP-разработчику, вам может потребоваться установить сетевое соединение и взаимодействовать с другим сервером по протоколу TCP/IP. Исторически для этих целей использовалась функция `fsockopen()`. Примечание: `fsockopen()` была признана устаревшей в PHP 8.1 и удалена в PHP 8.2. В современных PHP-приложениях следует использовать `stream_socket_client()` или cURL. В этой статье рассматривается устаревшая функция исключительно в справочных целях и для помощи при миграции.
Что такое функция fsockopen()?
Функция `fsockopen()` открывает сетевое соединение TCP/IP с указанным хостом и портом, позволяя отправлять и получать данные через файловые указатели.
Как использовать функцию fsockopen()
Использование функции `fsockopen()` достаточно просто. Ниже приведён синтаксис:
Синтаксис PHP
fsockopen($hostname, $port, &$errno, &$errstr, $timeout);Функция принимает пять параметров:
`$hostname`: Имя хоста или IP-адрес сервера.`$port`: Номер порта для подключения.`&$errno`: Переменная, в которой хранится номер ошибки, если она возникла.`&$errstr`: Переменная, в которой хранится сообщение об ошибке, если оно есть.`$timeout`: Таймаут подключения в секундах. По умолчанию используется значение`default_socket_timeout`из`ini`-файла, если параметр не указан.
Примечание: Для безопасных соединений добавьте к имени хоста префикс
`ssl://`или`tls://`(например,`tls://example.com`).
Ниже приведён пример использования функции `fsockopen()` для установки сетевого соединения с сервером и отправки/получения данных:
Пример использования
<?php
$host = "example.com";
$port = 80;
$timeout = 30;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
echo "Error: $errstr ($errno)<br/>";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}В этом примере мы используем функцию `fsockopen()` для установки сетевого соединения с сервером `example.com` на порту 80. Мы указываем таймаут подключения 30 секунд. Если соединение установлено успешно, мы отправляем HTTP GET-запрос на сервер и получаем ответ с помощью функции `fgets()`.
Примечание: Для HTTPS-запросов используйте
`tls://`в качестве префикса протокола в переменной`$host`.
Заключение
Хотя `fsockopen()` обеспечивает низкоуровневое взаимодействие по TCP/IP, в современном PHP она устарела. Для новых проектов используйте `stream_socket_client()` или cURL. Эта справочная информация по-прежнему полезна для поддержки устаревших кодовых баз.
Практика
Что делает функция fsockopen в PHP?