ftp_get_option()
Функция ftp_get_option() в PHP возвращает текущее значение параметра времени выполнения для открытого FTP-соединения.
Что такое ftp_get_option()?
Функция ftp_get_option() — это встроенная функция PHP, которая возвращает единственный параметр времени выполнения открытого FTP-соединения. Параметр времени выполнения — это настраиваемый параметр, управляющий поведением FTP-клиента: например, время ожидания до истечения тайм-аута или автоматическое возобновление прерванных передач. Читать эти параметры можно с помощью ftp_get_option(), а изменять — с помощью его аналога ftp_set_option().
Функция ftp_get_option() обычно используется, когда нужно проверить текущую конфигурацию соединения перед принятием дальнейших решений — например, записать в лог активное значение тайм-аута или убедиться, что автовозобновление включено перед началом загрузки большого файла.
Функция принимает два параметра:
ftp— идентификатор соединения, возвращаемыйftp_connect()(объектFTP\Connectionв PHP 8.1+, или ресурс в старых версиях).option— константа, указывающая имя извлекаемого параметра (например,FTP_TIMEOUT_SEC).
Функция возвращает значение типа mixed в зависимости от запрашиваемого параметра: целое число для FTP_TIMEOUT_SEC или boolean для флаговых параметров. Если имя параметра неизвестно, PHP выдаёт предупреждение и функция возвращает false.
Синтаксис ftp_get_option()
Синтаксис функции ftp_get_option() выглядит следующим образом:
Синтаксис ftp_get_option()
mixed ftp_get_option ( FTP\Connection|resource $ftp_stream , int $option )Оба параметра обязательны. Параметр $ftp_stream — это идентификатор соединения, возвращаемый ftp_connect() (или ftp_ssl_connect()), а $option — одна из предопределённых констант FTP_*, описанных ниже.
Доступные параметры в ftp_get_option()
Функция ftp_get_option() поддерживает следующие константы параметров. Тип возвращаемого значения различается в зависимости от параметра, что важно учитывать при проверке результата:
| Константа | Возвращает | Описание |
|---|---|---|
FTP_TIMEOUT_SEC | int | Тайм-аут в секундах для всех сетевых операций данного соединения. |
FTP_AUTOSEEK | bool | Если true (по умолчанию), передача возобновляется с запрошенного смещения, а не перезагружается с начала. |
FTP_USEPASVADDRESS | bool | Если true (по умолчанию), IP-адрес из ответа PASV используется для соединения данных. Установите false, если сервер находится за NAT и сообщает недоступный адрес. |
Примечание:
FTP_USEPASVADDRESSимеет смысл только в пассивном режиме.FTP_LISTEN, который можно встретить в старых материалах, не является допустимым параметром дляftp_get_option()— его запрос вызывает предупреждение и возвращаетfalse.
Использование ftp_get_option()
Чтобы использовать функцию ftp_get_option(), необходимо сначала установить соединение с FTP-сервером с помощью функции ftp_connect(). Вот пример:
Использование ftp_get_option()
<?php
// Set up an FTP connection
$conn = ftp_connect('ftp.example.com');
// Login with your FTP credentials
ftp_login($conn, 'username', 'password');
// Retrieve the current timeout (in seconds)
$timeout = ftp_get_option($conn, FTP_TIMEOUT_SEC);
echo "Current timeout: {$timeout} seconds\n"; // Default: 90 seconds
// Check whether passive-address rewriting is enabled
$usePasv = ftp_get_option($conn, FTP_USEPASVADDRESS);
echo "Use PASV address: " . ($usePasv ? "yes" : "no") . "\n";
// Close the FTP connection
ftp_close($conn);В этом примере мы устанавливаем соединение с помощью ftp_connect(), выполняем аутентификацию через ftp_login(), затем читаем два параметра. Значение FTP_TIMEOUT_SEC по умолчанию для нового соединения равно 90, поэтому первая строка выведет Current timeout: 90 seconds. В конце освобождаем соединение с помощью ftp_close().
Обработка ошибок в ftp_get_option()
Поскольку FTP_AUTOSEEK и FTP_USEPASVADDRESS могут законно возвращать boolean false, никогда не проверяйте результат с помощью нестрогого == — отключённый флаг выглядел бы как ошибка. Используйте строгий оператор идентичности ===, чтобы отличить реальную ошибку от допустимого значения false:
Обработка ошибок в ftp_get_option()
<?php
$conn = ftp_connect('ftp.example.com');
ftp_login($conn, 'username', 'password');
$timeout = ftp_get_option($conn, FTP_TIMEOUT_SEC);
if ($timeout === false) {
// The option name was invalid, or the connection is not usable
echo "Failed to retrieve the option.\n";
} elseif ($timeout > 0) {
echo "Timeout is set to {$timeout} seconds.\n";
} else {
echo "No timeout is set.\n";
}
ftp_close($conn);Здесь строгая проверка === false позволяет отличить реальную ошибку извлечения от параметра, чьё настоящее значение равно 0 или false. Для boolean-параметров, таких как FTP_USEPASVADDRESS, сначала сохраните результат в переменную, а затем сравнивайте с ===, прежде чем интерпретировать его как включённый или выключенный.
Связанные функции
ftp_set_option()— изменить параметр времени выполнения (аналог этой функции для записи).ftp_connect()— открыть соединение, к которому применяются эти параметры.ftp_pasv()— переключить пассивный режим, который взаимодействует сFTP_USEPASVADDRESS.- Обзор PHP FTP — все FTP-функции в одном месте.
Заключение
Функция ftp_get_option() позволяет читать конфигурацию времени выполнения открытого FTP-соединения — прежде всего тайм-аут сети, а также флаги автовозобновления и пассивного адреса. Помните, что некоторые параметры возвращают boolean, поэтому всегда проверяйте результат с помощью ===, чтобы не спутать допустимое значение false с ошибкой.