PHP 8.1.28 Released!

ftp_nb_fget

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

ftp_nb_fgetRetrieves a file from the FTP server and writes it to an open file (non-blocking)

Descrição

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

ftp_nb_fget() retrieves a remote file from the FTP server.

The difference between this function and ftp_fget() is that this function retrieves the file asynchronously, so your program can perform other operations while the file is being downloaded.

Parâmetros

ftp

Uma instância de FTP\Connection.

stream

An open file pointer in which we store the data.

remote_filename

The remote file path.

mode

The transfer mode. Must be either FTP_ASCII or FTP_BINARY.

offset

The position in the remote file to start downloading from.

Valor Retornado

Returns FTP_FAILED or FTP_FINISHED or FTP_MOREDATA.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro ftp agora espera uma instância de FTP\Connection; anteriormente, um resource era esperado.
7.3.0 The mode parameter is now optional. Formerly it has been mandatory.

Exemplos

Exemplo #1 ftp_nb_fget() example

<?php

// open some file for reading
$file = 'index.php';
$fp = fopen($file, 'w');

$ftp = ftp_connect($ftp_server);

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

// Initiate the download
$ret = ftp_nb_fget($ftp, $fp, $file, FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// Do whatever you want
echo ".";

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

// close filepointer
fclose($fp);
?>

Veja Também

  • ftp_nb_get() - Retrieves a file from the FTP server and writes it to a local file (non-blocking)
  • ftp_nb_continue() - Continua a receber/enviar um arquivo (sem bloquear)
  • ftp_fget() - Downloads a file from the FTP server and saves to an open file
  • ftp_get() - Downloads a file from the FTP server

add a note

User Contributed Notes 1 note

up
6
pilif at pilif dot ch
19 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