PHP Conference Nagoya 2025

ftp_nb_fget

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

ftp_nb_fgetRecupera um arquivo do servidor FTP e grava-o em um arquivo aberto (sem bloqueio)

Descrição

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

ftp_nb_fget() recupera um arquivo remoto do servidor FTP.

A diferença entre esta função e ftp_fget() é que esta função recupera o arquivo de forma assíncrona, para que a aplicação possa realizar outras operações enquanto o arquivo está sendo recebido.

Parâmetros

ftp

Uma instância de FTP\Connection.

stream

Um ponteiro de arquivo aberto no qual os dados serão armazenados.

remote_filename

O caminho do arquivo remoto.

mode

O modo de transferência. Deve ser FTP_ASCII ou FTP_BINARY.

offset

A posição no arquivo remoto para iniciar o recebimento.

Valor Retornado

Retorna FTP_FAILED ou FTP_FINISHED ou 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 O parâmetro mode agora é opcional. Antigamente era obrigatório.

Exemplos

Exemplo #1 Exemplo de ftp_nb_fget()

<?php

// abre um arquivo para gravação
$file = 'index.php';
$fp = fopen($file, 'w');

$ftp = ftp_connect($ftp_server);

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

// Inicia o recebimento
$ret = ftp_nb_fget($ftp, $fp, $file, FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// Faz alguma coisa
echo ".";

// Continua o recebimento...
$ret = ftp_nb_continue($ftp);
}
if (
$ret != FTP_FINISHED) {
echo
"Houve um erro ao receber o arquivo...";
exit(
1);
}

// fecha o ponteiro do arquivo
fclose($fp);
?>

Veja Também

  • ftp_nb_get() - Recupera um arquivo do servidor FTP e grava-o em um arquivo local (sem bloqueio)
  • ftp_nb_continue() - Continua a receber/enviar um arquivo (sem bloquear)
  • ftp_fget() - Recebe um arquivo do servidor FTP e salva em um arquivo aberto
  • ftp_get() - Recebe um arquivo do servidor FTP

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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