Skip to Content »

FTP Upload con PHP

  • 22/11/2007
  • 12:40 am
  • unijimpe

Hoy les presentamos una guía de como implementar Upload de archivos por FTP utilizando PHP. Para ello nos hemos guiado de FTP Upload via cURL en donde esta muy bien explicado.

Que necesitamos?
cURL es una librería PHP muy potente la cual permite enviar y recibir archivos por diferentes protocolos (HTTP, FTP), además soporte envío de datos por POST o GET, incluso permite autenticarse en servidores remotos. Entonces utilizaremos cURL para conectarnos al nuestro FTP y haremos la transferencia del archivo seleccionado.

Creando el Formulario
Lo primero es crear un formulario en donde seleccionaremos el archivo a subir, esto de la siguiente forma:

  1. <form action="" method="post" enctype="multipart/form-data">
  2. Seleccionar archivo:
  3. <input type="file" name="archivo"  />
  4. <input type="submit" name="enviar" value="Upload" />
  5. <input type="hidden" name="action" value="upload" />
  6. </form>

Creando el Script
El siguiente paso es crear el php que se encargue de subir el archivo, primero verificamos que se haya seleccionado el archivo, luego creamos una variable cURL la cual asignamos con los valores que deseamos enviar y finalmente verificamos que se haya subido correctamente el archivo.

  1. $rpta = "";
  2. if ($_POST["action"] == "upload") {
  3.     $tmpfile = $_FILES['archivo']['tmp_name'];
  4.     $tmpname = $_FILES['archivo']['name'];
  5.    
  6.     $ftpuser = "usuario";
  7.     $ftppass = "password";
  8.     $ftppath = "ftp.dominio.com/path/";
  9.     $ftpurl = "ftp://".$ftpuser.":".$ftppass."@".$ftppath;
  10.    
  11.     if ($tmpname != "") {
  12.         $fp = fopen($tmpfile, 'r');
  13.         $ch = curl_init();
  14.         curl_setopt($ch, CURLOPT_URL, $ftpurl.$tmpname);
  15.         curl_setopt($ch, CURLOPT_UPLOAD, 1);
  16.         curl_setopt($ch, CURLOPT_INFILE, $fp);
  17.         curl_setopt($ch, CURLOPT_INFILESIZE, filesize($tmpfile));
  18.         curl_exec($ch);
  19.         $error = curl_errno($ch);
  20.         curl_close ($ch);
  21.         if ($error == 0) {
  22.             $rpta = 'Archivo subido correctamente.';
  23.         } else {
  24.             $rpta = 'Error al subir el archivo.';
  25.         }
  26.     } else {
  27.         $rpta = 'Seleccionar un archivo.';
  28.     }
  29. }

Como puede ver no es muy complicado este tipo de implementación y tiene la ventaja que podemos enviar archivos mas grandes que con upload de forma normal. No he puesto una versión de este ejemplo funcionando pues quiero evitar que suban archivos no deseados. Finalmente les dejo los archivos fuente de este ejemplo en donde solo deben colocar el usuario, clave y dominio a donde desean subir.

Posts Relacionados

Total de Comentarios: 11

Publicidad
Arcadio
22/11/2007
8:33 am

tremendo ejemplo gracias

22/11/2007
1:29 pm

gracias por el codigo de upload la verdad es que me sirvio de mucho estamos en contacto…

Augusto
28/11/2007
7:22 am

Luche y luche y no logre hacerlo funcionar. Me da error en el upload. Tengo acceso escritura el directorio donde se alojarian los archivos, tengo bien la ruta, usuario y password, etc. Alquien me puede ayudar?

28/11/2007
10:58 pm

Augusto fíjate bien a que carpeta estas subiendo. Ahora si lo que deseas es saber que error devuelve, puedes imprimir el error, esto es modificando el if de la forma:

if ($error == 0) {
$rpta = 'Archivo subido correctamente.';
} else {
echo "Error code: " . $error;
$rpta = 'Error al subir el archivo.';
}

Esto te imprimirá un numero que indica que error ha ocurrido, puedes ver la lista de códigos de errores en: cURL Error Codes

Joan Torrent
04/12/2007
5:27 am

Hola buenos días.

He probado el ejemplo y en principio me funciono correctamente con archivos pequeños. Pero utilizando archivo de más tamaño (5MB por ejemplo), me informa de un error “Internal Server Error”.

¿Puede ser que el servidor que estoy utilizando tenga algún tipo de limitación a la hora de utilizar el ejemplo?

Muchas gracias. Espero que alguien me pueda ayudar.

04/12/2007
2:07 pm

Que tal, por mas que intento no me funciona, no me pide el usuario y contraseña.

Hice lo que le dijiste a Augusto, y en error me sale esto: Error code: 10

¿Me pudieras ayudar?

Gracias,

Saludos.

D@NIEL
28/01/2008
10:55 am

Hola a todos, necesito ayuda con respecto a este ejemplo, porq lo ejecuto y me sale el siguiente error:

Method Not Allowed

The requested method PUT is not allowed for the URL /upload/license.txt.
Apache/2.2.6 (Unix) mod_ssl/2.2.6 OpenSSL/0.9.7a mod_bwlimited/1.4 mod_auth_passthrough/2.1 PHP/5.2.5 Server at http://www.tiburones.net Port 80

Porfa necesito ayuda de ustedes Gracias de antemano

29/01/2008
2:47 pm

gracias nuevamente por el codigo de upload, la verdad es que a mi no me ha dado ningun tipo de problema…sugiero un debate en linea para compartit conocimientos de php..gracias
les dejo mi correo por si desean algo….
suerte….php

Luis Carlos Ortiz
26/02/2008
2:59 pm

Buenas Tardes, me parece muy interesante el contenido de la pagina, pero tengo un problema con el ftp unload, me sale el error el error numero “6″ CURLE_COULDNT_RESOLVE_HOST,agradezco la ayuda de alguno de ustedes pues soy muy nuevo en esto…gracias…

13/03/2008
6:11 pm

Me da Este Errooor!!!

Fatal error: Call to undefined function curl_init() in /home/virtual/sitio172322/www/ftpupload.php on line 14

13/04/2008
7:36 pm

Debes verificar tu configuración del PHP en el PHP.ini

Saludos

Enviar Comentario

(*)

(*)