PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ftp_nb_get> <ftp_nb_fget
Last updated: Fri, 22 Aug 2008

view this page in

ftp_nb_fput

(PHP 4 >= 4.3.0, PHP 5)

ftp_nb_fputAlmacena un archivo desde un archivo abierto en el servidor FTP (modo no-bloqueo)

Descripción

int ftp_nb_fput ( resource $secuencia_ftp , string $archivo_remoto , resource $gestor , int $modo [, int $pos_comienzo ] )

ftp_nb_fput() carga los datos desde un apuntador de archivo a un archivo remoto en el servidor FTP.

La diferencia entre esta función y ftp_fput() es que la presente función carga el archivo de forma asincrónica, así que su programa puede realizar otras operaciones mientras el archivo está siendo cargado.

Lista de parámetros

secuencia_ftp

El identificador de enlace de la conexión FTP.

archivo_remoto

La ruta del archivo remoto.

gestor

Un apuntador de archivo abierto sobre el archivo local. La lectura se detiene al final del archivo.

modo

El modo de transferencia. Debe ser FTP_ASCII o FTP_BINARY.

pos_comienzo

Valores retornados

Devuelve FTP_FAILED o FTP_FINISHED o FTP_MOREDATA.

Ejemplos

Example #1 Ejemplo de ftp_nb_fput()

<?php

$archivo 
'index.php';

$da fopen($archivo'r');

$id_con ftp_connect($servidor_ftp);

$resultado_login ftp_login($id_con$nombre_usuario_ftp$contrasenya_ftp);

// Iniciar la carga
$ret ftp_nb_fput($id_con$arcivo$daFTP_BINARY);
while (
$ret == FTP_MOREDATA) {

   
// Haga lo que desee
   
echo ".";

   
// Continuar la carga...
   
$ret ftp_nb_continue($id_con);
}
if (
$ret != FTP_FINISHED) {
   echo 
"Hubo un error en la carga del archivo...";
   exit(
1);
}

fclose($da);
?>



add a note add a note User Contributed Notes
ftp_nb_fput
jascha at bluestatedigital dot com
27-Dec-2004 11:45
There is an easy way to check progress while uploading a file.  Just use the ftell function to watch the position in the file handle.  ftp_nb_fput will increment the position as the file is transferred.

Example:

<?

    $fh
= fopen ($file_name, "r");
   
$ret = ftp_nb_fput ($ftp, $file_name, $fh, FTP_BINARY);
    while (
$ret == FTP_MOREDATA) {
        print
ftell ($fh)."\n";
       
$ret = ftp_nb_continue($ftp);
    }
    if (
$ret != FTP_FINISHED) {
        print (
"error uploading\n");
        exit(
1);
    }
   
fclose($fh);

?>

This will print out the number of bytes transferred thus far, every time the loop runs.  Coverting this into a percentage is simply a matter of dividing the number of bytes transferred by the total size of the file.
pain at ziodex dot com
05-Dec-2004 04:44
While trying to create a progress bar for uploading files with the ftp_nb_fput() function
I've noticed that the ftp_size() function will not work during the upload  progess if you are using the
same resource handle.

<?php
   
// This will not work
    // ...
   
$ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY);
    while (
$ret == FTP_MOREDATA) {
       
// ...
       
$remote_file_size = ftp_size($conn_id, $remote_file);
       
// ...
       
$ret = ftp_nb_continue($conn_id);
    }
   
// ...
?>

However, by creating a new connection to the server you can retrieve current file size of the uploaded file, then
compare it with your local file to calculate the progress. A full example follows:

<?php
    ob_end_flush
();
   
$remote_file = 'remote.txt';
   
$local_file = 'local.txt';

   
$fp = fopen($local_file, 'r');
   
$conn_id = ftp_connect($ftp_server);
   
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
   
$ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY);
    while (
$ret == FTP_MOREDATA) {
       
// Establish a new connection to FTP server
       
if(!isset($conn_id2)) {
           
$conn_id2 = ftp_connect($ftp_server);
           
$login_result2 = ftp_login($conn_id2, $ftp_user_name, $ftp_user_pass);
        }
       
       
// Retreive size of uploaded file.
       
if(isset($conn_id2)) {
           
clearstatcache(); // <- this must be included!!
           
$remote_file_size = ftp_size($conn_id2, $remote_file);
        }

      
// Calculate upload progress
      
$local_file_size  = filesize($local_file);
       if (isset(
$remote_file_size) && $remote_file_size > 0 ){
          
$i = ($remote_file_size/$local_file_size)*100;
          
printf("%d%% uploaded<br>", $i);
          
flush();
       } 
       
$ret = ftp_nb_continue($conn_id);
    }

    if (
$ret != FTP_FINISHED) {
        print(
"There was an error uploading the file...<br>");
        exit(
1);
    }
    else {
        print(
"Done.<br>");
    }
   
fclose($fp);
?>

ftp_nb_get> <ftp_nb_fget
Last updated: Fri, 22 Aug 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites