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: 22

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

19/05/2008
12:21 pm

Por favor, alguien me podria decir hasta cuantos megas puedo subir? Se que mi servidor no me deja subir desde una pagina php mas de 8 megas, pero quizás sea distinto desde con el codigo de ftp
gracias

24/07/2008
4:07 pm

a mi si me funciona en un hosting pero cuando lo pongo a funcionar en otro host a la hora que le doy clik en upload con un archivo que pesa 20 megas se cae la web

10/08/2008
8:45 pm

no se puede copiar el codigo!!

atxi
12/12/2008
2:55 am

Muy bueno, muchas gracias!

Miguel Coraggio
12/12/2008
11:40 am

me da el siguiente error
Fatal error: Call to undefined function: curl_init() in /var/www/bacigaluppi.com/htdocs/uploadftp/ftpupload.php on line 14

que debo hacer y donde…

Gracias… soy un principiante, de todas maneras en otros sitios que lo he provado ha funcionado correctamente.

Otra vez gracias.

12/12/2008
10:29 pm

Miguel, el mensaje esta indicando que no tienes habilitada la función curl en tu servidor, verifica que este habilitado o solicita que te lo activen a tu proveedor de hosting.

alberto
16/12/2008
4:41 am

Me da error de programacion.
error 500

Juan
22/04/2009
4:13 pm

Hola, ami me sale error: 67… y no me sube nada… que puede ser?

Gracias!

David
26/04/2009
4:40 pm

El error 67 puede darse porque el servidor remoto no tiene activo el puerto, o por permisos del usuario ftp, debes revisar este tema con el proveedor del servicio

Puyet
14/06/2009
1:32 am

muy buen aporte, funciona todo de maravilla, ojala puedan postear y si ya esta posteado indicarme como exportar de php a pdf

17/06/2009
10:04 pm

Hola, puedo subir archivos chicos pero cuando intento subir archivos de más de 8MB me dice que subio correctamente pero en realidad no subio nada.
Habra alguna forma de subir archivos más grandes? O es necesario cambiar de servidor?

Muchas gracias.

Enviar Comentario

(*)

(*)