Перейти к содержимому

ftp_nb_put()

Понимание функции PHP ftp_nb_put()

Функция ftp_nb_put() — это встроенная функция PHP, которая загружает файл на FTP-сервер в неблокирующем режиме. В этом руководстве рассматриваются её параметры, синтаксис, применение и обработка ошибок, чтобы помочь вам эффективно интегрировать её в ваши PHP-проекты.

Что такое ftp_nb_put()?

Функция ftp_nb_put() загружает файл на FTP-сервер, не останавливая выполнение скрипта. Она принимает три обязательных параметра:

  1. ftp_stream: Идентификатор соединения, возвращаемый функцией ftp_connect() (объект FTP\Connection в PHP 7.1+).
  2. remote_file: Путь к удалённому файлу, на который будет загружен файл.
  3. local_file: Путь к локальному файлу.

Функция возвращает одну из следующих констант: FTP_MOREDATA (передача данных выполняется), FTP_FINISHED (передача завершена) или FTP_FAILED (произошла ошибка).

Синтаксис ftp_nb_put()

Синтаксис функции ftp_nb_put() выглядит следующим образом:

Синтаксис ftp_nb_put()

php
int ftp_nb_put ( FTP\Connection $ftp_stream , string $remote_file , string $local_file , int $mode [, int $startpos = 0 ] )

Функция ftp_nb_put() принимает три обязательных параметра (ftp_stream, remote_file и local_file) и один необязательный параметр (startpos). Параметр mode является обязательным и указывает режим передачи: для большинства файлов (изображений, архивов, исполняемых файлов) рекомендуется использовать FTP_BINARY, чтобы избежать искажений символов перевода строки, тогда как FTP_ASCII используется для текстовых файлов (хотя FTP_BINARY обычно безопаснее для всех типов файлов). Параметр startpos указывает позицию в удалённом файле, с которой начнётся загрузка. По умолчанию startpos равен 0, что означает начало загрузки с самого начала файла.

Применение ftp_nb_put()

Чтобы использовать функцию ftp_nb_put(), сначала необходимо установить соединение с FTP-сервером с помощью функции ftp_connect(). Вот пример:

Применение ftp_nb_put()

php
<?php

// Set up an FTP connection
$conn = ftp_connect('ftp.example.com');
if (!$conn) {
    die('Could not connect to FTP server.');
}

// Login with your FTP credentials
if (!ftp_login($conn, 'username', 'password')) {
    die('Login failed.');
}

// Initiate an asynchronous FTP operation
$result = ftp_nb_put($conn, 'remote_file.txt', 'local_file.txt', FTP_BINARY);
if ($result === FTP_FAILED) {
    die('Upload failed.');
}

// Continue the asynchronous FTP operation
while ($result === FTP_MOREDATA) {
    // Do something else while waiting for the FTP operation to complete
    $result = ftp_nb_continue($conn);
}

if ($result === FTP_FINISHED) {
    echo "Upload completed successfully.\n";
}

// Close the FTP connection
ftp_close($conn);

В этом примере мы устанавливаем соединение с FTP-сервером с помощью функции ftp_connect(). Затем входим в систему, используя учётные данные FTP, с помощью функции ftp_login(). Мы инициируем асинхронную FTP-операцию с помощью функции ftp_nb_put(). Мы продолжаем операцию с помощью функции ftp_nb_continue() внутри цикла, который проверяет наличие FTP_MOREDATA, и наконец проверяем завершение с помощью FTP_FINISHED перед закрытием FTP-соединения.

Обработка ошибок в ftp_nb_put()

Важно правильно обрабатывать ошибки при использовании функции ftp_nb_put(). Если функция возвращает FTP_FAILED, это означает, что загрузка не удалась. Вот пример обработки ошибок:

Обработка ошибок в ftp_nb_put()

php
<?php

$result = ftp_nb_put($conn, 'remote_file.txt', 'local_file.txt', FTP_BINARY);

if ($result === FTP_FAILED) {
    echo "Failed to upload file to remote server.\n";
}

while ($result === FTP_MOREDATA) {
    // Do something else while waiting for the FTP operation to complete
    $result = ftp_nb_continue($conn);
}

if ($result === FTP_FINISHED) {
    echo "Upload completed.\n";
}

ftp_close($conn);

Правильно обрабатывая ошибки и проверяя возвращаемое значение функции, вы можете обеспечить успешное выполнение ваших FTP-операций с помощью функции ftp_nb_put().

Заключение

Подводя итог, функция ftp_nb_put() — это полезный инструмент для загрузки файлов на FTP-сервер в неблокирующем режиме. Она позволяет продолжать выполнение других операций, пока ожидает завершения загрузки. При правильном использовании и обработке ошибок эта функция может стать ценным активом в ваших PHP-проектах.

Примечание: Функции ftp_nb_* считаются устаревшими в современном PHP. Для новых проектов рекомендуется использовать cURL или асинхронные HTTP-библиотеки, такие как Guzzle, для обеспечения лучшей производительности, безопасности и более широкой поддержки протоколов.

Практика

Какова цель функции ftp_nb_put в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.