2009-07-24 19 views
22

Estoy intentando descargar un archivo desde un servidor FTP usando rizo y php, pero no puedo encontrar ninguna documentación para ayudar adescarga un archivo de FTP mediante rizo y php

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL,"ftp://$_FTP[server]"); 
curl_setopt($curl, CURLOPT_FTPLISTONLY, 1); 
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec ($curl); 

yo puede conseguir una lista de archivos, pero eso es todo

+1

tener que pretendía dar la URL completa al archivo y la eliminación de la opción FTPLISTONLY? – cOle2

+2

Por curiosidad, ¿alguna de estas respuestas fue útil? –

+0

Tengo crear una clase para descargar archivos desde ftp usando curl. miralo http://thien321091.github.io/Curl-FTP-with-php/ – HoangHieu

Respuesta

4
  • Establezca CURLOPT_URL en la ruta completa del archivo.
  • Elimina la línea CURLOPT_FTPLISTONLY.
  • Añadir estas líneas antes curl_exec:

    $file = fopen("filename_to_save_to", "w"); 
    curl_setopt($curl, CURLOPT_FILE, $file); 
    
20

Mi conjetura es que la URL apunta hacia un directorio, no un archivo. Debería enviar CURLOPT_URL la URL completa al archivo. Además, si desea descargar un archivo, puede guardarlo en algún lugar.

Ejemplo de trabajo:

$curl = curl_init(); 
$file = fopen("ls-lR.gz", 'w'); 
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.sunet.se/ls-lR.gz"); #input 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); #output 
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]"); 
curl_exec($curl); 
curl_close($curl); 
fclose($file); 
1

Ver ayuda CURL incluyendo la forma de conectarse a ella a través de FTP aquí http://www.linuxformat.co.uk/wiki/index.php/PHP_-_The_Curl_library

NOTA: Si el archivo se puede acceder desde HTTP, entonces es mejor que sólo tiene que utilizar el enlace EG: http://host.com/file.txt y luego use file_get_contents o funciones de archivo.

Puede utilizar http://uk.php.net/file_get_contents o de cualquier otra forma para descargar el archivo a su computadora. Esta opción será mejor que usar FTP para descargar. Siempre puede usar FTP para cargar como se menciona en el enlace de arriba.

0

Después de probar todas estas respuestas y no tener ninguna de ellas funcionando, esto es lo que finalmente llegué a trabajar.

$curl = curl_init(); 
$fh = fopen("FILENAME.txt", 'w'); 
curl_setopt($curl, CURLOPT_URL, "ftp://{$serverInfo['username']}:{$servererInfo['password']}@{$serverInfo['server']}/{$serverInfo['file']}"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($curl); 
fwrite($fh, $result); 
fclose($fh); 
curl_close($curl); 
1
$ftp_location = put your ftp adress here; 
$location_login = put your login here; 
$location_pwd = put your password here; 
$conn_id = ftp_connect("$ftp_location"); 
$login_result = ftp_login($conn_id, $location_login, $location_pwd); 

if ((!$conn_id) || (!$login_result)) { 
    echo "FTP connection has failed!"; 
    exit; 
} else { 
    echo "Connected"; 
} 

// get the file 
// change products.csv to the file you want 
$local = fopen("products.csv","w"); 
$result = ftp_fget($conn_id, $local,"products.csv", FTP_BINARY); 
fwrite($local, $result); fclose($local); 

// check upload status 
if (!$result) { 
    echo "FTP download has failed!"; 
} else { 
    echo "Downloaded ";  
} 

// close the FTP stream 
ftp_close($conn_id); 
4

respuesta de la Comunidad trabaja con pequeños ajustes:

Parece que la fijación de CURLOPT_FILE antes de CURLOPT_RETURNTRANSFER no funciona, probablemente porque CURLOPT_FILE depende de CURLOPT_RETURNTRANSFER está estableciendo.

Citando el comentario de joeterranova en esta página: http://php.net/manual/fr/function.curl-setopt.php

Cuestiones relacionadas