PHP Conference Nagoya 2025

ftp_nb_fget

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ftp_nb_fgetСкачивает файл с FTP-сервера в асинхронном режиме и сохраняет его в открытом заранее файле

Описание

ftp_nb_fget(
    FTP\Connection $ftp,
    resource $stream,
    string $remote_filename,
    int $mode = FTP_BINARY,
    int $offset = 0
): int

Функция ftp_nb_fget() скачивает файл с удалённого FTP-сервера.

Разница между этой функцией и функцией ftp_fget() заключается в том, что эта функция получает файл асинхронно, поэтому программе доступны другие операции, пока файл скачивается.

Список параметров

ftp

Экземпляр класса FTP\Connection.

stream

Открытый файловый дескриптор для сохранения данных.

remote_filename

Путь к удалённому файлу.

mode

Режим передачи. Параметр принимает либо константу FTP_ASCII, либо константу FTP_BINARY.

offset

Позиция начала загрузки в удалённом файле.

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

Функция возвращает значения FTP_FAILED, FTP_FINISHED или FTP_MOREDATA.

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

Версия Описание
8.1.0 Параметр ftp теперь ожидает экземпляр класса FTP\Connection; раньше параметр ждал ресурс (resource).
7.3.0 Параметр mode сделали необязательным, раньше параметр был обязательным.

Примеры

Пример #1 Пример скачивания файла с FTP-сервера в асинхронном режиме функцией ftp_nb_fget()

<?php

// Открываем файл для записи
$file = 'index.php';
$fp = fopen($file, 'w');

$ftp = ftp_connect($ftp_server);

$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// Начало скачивания
$ret = ftp_nb_fget($ftp, $fp, $file, FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// Выполняем какие-то действия...
echo ".";

// Продолжение скачивания...
$ret = ftp_nb_continue($ftp);
}

if (
$ret != FTP_FINISHED) {
echo
"При скачивании файла возникла ошибка...";
exit(
1);
}

// Закрываем файл
fclose($fp);

?>

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

  • ftp_nb_get() - Скачивает файл с FTP-сервера в асинхронном режиме и сохраняет его в локальный файл
  • ftp_nb_continue() - Продолжает асинхронную операцию
  • ftp_fget() - Скачивает файл с FTP-сервера и сохраняет его в предварительно открытом файле
  • ftp_get() - Скачивает файл с FTP-сервера

Добавить

Примечания пользователей 1 note

up
6
pilif at pilif dot ch
20 years ago
If you want to monitor the progress of the download, you may use the filesize()-Function.

But note: The results of said function are cached, so you'll always get 0 bytes. Call clearstatcache() before calling filesize() to determine the actual size of the downloaded file.

This may have performance implications, but if you want to provide the information, there's no way around it.

Above sample extended:

<?php
// get the size of the remote file
$fs = ftp_size($my_connection, "test");

// Initate the download
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

clearstatcache(); // <- this is important
$dld = filesize($locfile);
if (
$dld > 0 ){
// calculate percentage
$i = ($dld/$fs)*100;
printf("\r\t%d%% downloaded", $i);
}

// Continue downloading...
$ret = ftp_nb_continue ($my_connection);
}
if (
$ret != FTP_FINISHED) {
echo
"There was an error downloading the file...";
exit(
1);
}
?>

Philip
To Top