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

search for in the

ftp_login> <ftp_get_option
Last updated: Fri, 22 Aug 2008

view this page in

ftp_get

(PHP 4, PHP 5)

ftp_getDescarga un archivo desde el servidor FTP

Descripción

bool ftp_get ( resource $secuencia_ftp , string $archivo_local , string $archivo_remoto , int $modo [, int $pos_reanudar ] )

ftp_get() recupera un archivo remoto desde el servidor FTP, y lo almacena e un archivo local.

Lista de parámetros

secuencia_ftp

El identificador de enlace de la conexión FTP.

archivo_local

La ruta del archivo local (será sobrescrito si el archivo ya existe).

archivo_remoto

La ruta del archivo remoto.

modo

El modo de transferencia. Debe ser FTP_ASCII o FTP_BINARY.

pos_reanudar

La posición para el comienzo de la descarga en el archivo remoto.

Valores retornados

Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.

Ejemplos

Example #1 Ejemplo de ftp_get()

<?php

// definir algunas variables
$archivo_local 'local.zip';
$archivo_servidor 'servidor.zip';

// configurar conexión básica
$id_con ftp_connect($servidor_ftp);

// iniciar sesión con nombre de usuario y contraseña
$resultado_login ftp_login($id_con$ftp_nombre_usuario$ftp_contrasenya);

// intentar la descarga de $archivo_servidor y guardarlo en $archivo_local
if (ftp_get($id_con$archivo_local$archivo_servidorFTP_BINARY)) {
    echo 
"Se ha guardado satisfactoriamente en $archivo_local\n";
} else {
    echo 
"Ha ocurrido un problema\n";
}

// cerrar la conexión
ftp_close($id_con);

?>

Registro de cambios

Versión Descripción
4.3.0 Se agregó pos_reanudar .



ftp_login> <ftp_get_option
Last updated: Fri, 22 Aug 2008
 
add a note add a note User Contributed Notes
ftp_get
Aditya P dot Bhatt (adityabhai at gmail dot com)
25-Mar-2008 08:40
<?php
               
// define some variables
       
$folder_path = "YOUR FOLDER PATH";
       
$local_file = "LOCAL FILE PATH";
       
$server_file = "SERVER FILE PATH";
       
       
//-- Connection Settings
       
$ftp_server = "IP ADDRESS"; // Address of FTP server.
       
$ftp_user_name = "USERNAME"; // Username
       
$ftp_user_pass = "PASSWORD"; // Password
        #$destination_file = "FILEPATH";
       
        // set up basic connection
       
$conn_id = ftp_connect($ftp_server);
       
       
// login with username and password
       
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
       
       
// try to download $server_file and save to $local_file
       
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
            echo
"Successfully written to $local_file\n";
        } else {
            echo
"There was a problem\n";
        }
       
       
// close the connection
       
ftp_close($conn_id);
?>
anomie at users dot sf dot net
30-Jan-2007 12:24
Crud. The _nb_ only refers to reading from the ftp server, and the buffer in the socket pair is only about 364 bytes. So it doesn't work for files larger than that size.
anomie at users dot sf dot net
25-Jan-2007 02:50
Why there isn't an "ftp_get_contents" function, I don't know. It takes a little work to emulate one, but it's doable.
<?php
function ftp_get_contents($ftp_stream, $remote_file, $mode, $resume_pos=null){
   
$pipes=stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
    if(
$pipes===false) return false;
    if(!
stream_set_blocking($pipes[1], 0)){
       
fclose($pipes[0]); fclose($pipes[1]);
        return
false;
    }
   
$fail=false;
   
$data='';
    if(
is_null($resume_pos)){
       
$ret=ftp_nb_fget($ftp_stream, $pipes[0], $remote_file, $mode);
    } else {
       
$ret=ftp_nb_fget($ftp_stream, $pipes[0], $remote_file, $mode, $resume_pos);
    }
    while(
$ret==FTP_MOREDATA){
        while(!
$fail && !feof($pipes[1])){
           
$r=fread($pipes[1], 8192);
            if(
$r==='') break;
            if(
$r===false){ $fail=true; break; }
           
$data.=$r;
        }
       
$ret=ftp_nb_continue($ftp_stream);
    }
    while(!
$fail && !feof($pipes[1])){
       
$r=fread($pipes[1], 8192);
        if(
$r==='') break;
        if(
$r===false){ $fail=true; break; }
       
$data.=$r;
    }
   
fclose($pipes[0]); fclose($pipes[1]);
    if(
$fail || $ret!=FTP_FINISHED) return false;
    return
$data;
}
?>

Something similar would work to write a ftp_put_contents function, too.
administrator at gesoft dot org
12-Aug-2006 06:05
Hello everybody,

If someone will try to download files to the same local file (some temporary file), like shown here:

<?php
foreach ($files as $key=>$path) {
...
 
$result = ftp_get($ftpConnId, 'temp.tmp', $path, FTP_BINARY);
...
}
?>

please take in consideration the fact that you will have big problems with downloading (getting) hole files. In other words ‘temp.tmp’ file always will have the same size equal to first downloaded file despite the real size of downloading file. I have not idea what is the reason!

If someone will think that problem is just in getting proper file size (which you will get using filssize() function) he will be mistaken. The download file’s size is not equal to source file’s size materially, that means fflush() function will not solve the problem (I have tried this as well).

Finally the solution was founded: before downloading a file you will need to delete local file if such exist (‘temp.tmp’). So working code will look like:

<?php
foreach ($files as $key=>$path) {
...
  if (
file_exists('temp.tmp')) {
   
unlink('temp.tmp');
  }
 
$result = ftp_get($ftpConnId, 'temp.tmp', $path, FTP_BINARY);
...
}
?>

Good luck in scripting :-)

Vitali Simsive
corey-holzer at nyc dot rr dot com
23-Jan-2004 11:20
The zero size file is not a side effect.  When the ftp_get starts the first thing it does is to create the inode/file which it will stream the data too and that is a zero size file with the nname you specified for the local file.  When the download fails it leaves the file in place.
thivierr at telus dot net
22-Nov-2003 07:25
If you previously downloaded a file before (like a huge web log), and just want to get the remaining portion, do this:

$local_file_size = filesize($local_file_path);
$get_result = ftp_get($conn_id, $local_file_path, $remote_file_path, FTP_BINARY, $local_file_size);

This same code works regardless of wether the local file exists already or not.  You should first test to make sure the local file is not bigger than the remote file.
ramiro at qusarcr dot com
06-Nov-2002 12:36
Keep in mind that ftp_get will overwrite the file on your local machine if it has the same name.

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