jueves, 14 de enero de 2010

Upload (Subir) de archivos con php a la Web

Muchas veces necesitamos hacer uploads de archivos en nuestros proyectos para muchos es algo sencillo pero para los que recién empiezan les explicare como se realiza el proceso. Este upload lo haremos utilizando php.
upload-php.gif
El primer paso es crear un formulario en el cual se seleccione el archivo a subir, para ello utilizaremos el tag input del tipo file, además hay que tener en cuenta que hay que seleccionar el tipo de encoding para el formulario el cual es: multipart/form-data.
HTML:

  1. <form action="upload.php" method="post" enctype="multipart/form-data">


  2. <input name="archivo" type="file"
    size="35" />



  3. <input name="enviar" type="submit" value="Upload
    File"
    />



  4. <input name="action" type="hidden" value="upload" />   


  5. </form>

Luego en la página upload.php que es que se encarga de recibir los datos del formulario (Lo definimos en la propiedad action del formulario). El archivo seleccionado es subido temporalmente a una carpeta, entonces tenemos que copiar el archivo a la carpeta final, en caso contrario este archivo se eliminará automáticamente.
Para acceder a las propiedades del archivo php nos brinda el array $_FILES con las siguientes propiedades, en donde archivo es el nombre del campo con el cual se envió el archivo desde el formulario:
  • $_FILES['archivo']['size']: tamaño en bytes del archivo recibido
  • $_FILES['archivo']['type']: tipo mime del archivo, por ejemplo image/gif
  • $_FILES['archivo']['name']: nombre original del archivo
  • $_FILES['archivo']['tmp_name']: nombre del archivo temporal que se utiliza para almacenar en el servidor el archivo recibido
Algo que hago siempre es anteponer 6 caracteres aleatorios antes del nombre del archivo, esto para evitar duplicidad de nombres de los archivos.
PHP:

  1. $status = "";


  2. if ($_POST["action"] == "upload") {



  3.   // obtenemos los datos del archivo



  4.   $tamano = $_FILES["archivo"]['size'];



  5.   $tipo = $_FILES["archivo"]['type'];


  6.   $archivo = $_FILES["archivo"]['name'];



  7.   $prefijo = substr(md5(uniqid(rand())),0,6);





  8.   if ($archivo != "") {


  9.      // guardamos el archivo a la carpeta files



  10.       $destino = "files/".$prefijo."_".$archivo;



  11.       if (copy($_FILES['archivo']['tmp_name'],$destino)) {



  12.           $status= "Archivo subido: <b>".$archivo."</b>";


  13.         }else {



  14.           $status= "Error al subir el archivo";



  15.       }



  16.   } else {



  17.       $status = "Error al subir archivo";


  18.   }


  19. }
Todos los archivos se copiarán a la carpeta /files por que así lo definimos a la hora de copiar el archivo. Hay que tener en cuenta que la carpeta a donde se copiarán los archivos deben tener permisos de escritura en caso contrario se devolverá un error.
Ahora si tienes un hosting deberás cambiar los permisos, esto se hace comúnmente con un cliente de FTP que utilizas para subir tus archivos al hosting. Por ejemplo yo utilizo el FlashFXP como cliente de FTP y hay una opción llamada Atributes (CHMOD) para cambiar los permisos como se muestra en la siguiente imagen.
chmod-hosting.gif
En nuestro ejemplo no hemos utilizado las propiedades size y type, pero ustedes la pueden usar para restringir a un máximo de tamaño de archivo o restringir a cierto tipo de archivos por ejemplo solo permitir subir imágenes. Para finalizar, hemos agregado estilos a nuestra página creada y además hemos listado los archivos subidos a la carpeta files. Pueden ver el resultado final del ejemplo además de ellos les dejo los archivo fuente para que lo descarguen.

3 comentarios:

  1. toy cansada de q nada sirve de estas explicaciones... voy a hacer el ultimo intento contigo!!!!

    ResponderEliminar
    Respuestas
    1. jajajajajajajajaja

      amiga puedes usar una libreria que tiene todas las funciones que desees, el nombre de clase es Upload:
      link:- http://www.verot.net/php_class_upload.htm
      ahi tiene documentacion yes muy facil. y Funiona :)

      Eliminar
  2. jajajajajajajajaja

    amiga puedes usar una libreria que tiene todas las funciones que desees, el nombre de clase es Upload:
    link:- http://www.verot.net/php_class_upload.htm
    ahi tiene documentacion yes muy facil. y Funiona :)

    ResponderEliminar