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

search for in the

ftp_nb_get> <ftp_nb_fget
[edit] Last updated: Fri, 17 May 2013

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 $ftp_stream , string $remote_file , resource $handle , int $mode [, int $startpos = 0 ] )

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 esta función carga el archivo de forma asincrónica, de modo que su programa puede realizar otras operaciones mientras el archivo está siendo cargado.

Parámetros

ftp_stream

El identificador de enlace de la conexión FTP.

remote_file

La ruta del archivo remoto.

handle

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

mode

El modo de transferencia. Debe ser FTP_ASCII o FTP_BINARY.

startpos

La posición en el archivo remoto para empezar a subirlo.

Valores devueltos

Devuelve FTP_FAILED o FTP_FINISHED o FTP_MOREDATA.

Ejemplos

Ejemplo #1 Ejemplo de ftp_nb_fput()

<?php

$file 
'index.php';

$fp fopen($file'r');

$conn_id ftp_connect($ftp_server);

$login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass);

// Iniciar la carga
$ret ftp_nb_fput($conn_id$file$fpFTP_BINARY);
while (
$ret == FTP_MOREDATA) {

   
// Haga lo que quiera
   
echo ".";

   
// Continuar la carga...
   
$ret ftp_nb_continue($conn_id);
}
if (
$ret != FTP_FINISHED) {
   echo 
"Hubo un error al subir el archivo...";
   exit(
1);
}

fclose($fp);
?>

Ver también

  • ftp_nb_put() - Almacena un archivo en el servidor FTP (modo no-bloqueo)
  • ftp_nb_continue() - Continúa recuperando/enviando un archivo (modo no-bloqueo)
  • ftp_put() - Carga un archivo al servidor FTP
  • ftp_fput() - Carga un archivo abierto en el servidor FTP



add a note add a note User Contributed Notes ftp_nb_fput - [2 notes]
up
1
jascha at bluestatedigital dot com
8 years ago
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.
up
0
pain at ziodex dot com
8 years ago
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);
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites