Subir archivo a servidor

From Wiki de Caballero
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

El siguiente es un ejemplo básico de como subir un archivo al servidor, y por lo tanto al momento de utilizarlo en producción, se deben agregar validaciones, como por ejemplo tipo de archivo, peso del archivo, etc.

  • Código html para el formulario de subida de archivos (Permite subir varios archivos a la vez).
<html>
    <head>
        <title>Sube Archivos</title>
    </head>
    <body>
        <form action="upload.php" method="POST" enctype="multipart/form-data">
            <ul>
                <!--Si se desea limitar la subida de archivos a uno solo por vez, solo se debe eliminar
                 la palabra 'multiple' de la siguiente linea-->
                <li><input type="file" name="files[]" multiple/></li>
                <li><input type="submit" value="Subir Archivo"/></li>
            </ul>
        </form>
    </body>
</html>


  • Lo primero que se hace es extraer los datos del o los archivos subidos haciendo uso de un ciclo 'foreach'(files es el nombre del input del formulario con el que se seleccionan los archivos a subir)
<?php

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
  $file_name = $_FILES['files']['name'][$key];
  $file_size = $_FILES['files']['size'][$key];
  $file_tmp = $_FILES['files']['tmp_name'][$key];
  $file_type = $_FILES['files']['type'][$key];
  • $_FILES['files'] es un arreglo que contiene información del archivo que se esta subiendo. La información entregada por este arreglo puede ser utilizada para realizar validaciones, por ejemplo el peso del archivo:
    • name: corresponde al nombre del archivo.
    • size: corresponde al tamaño en bytes.
    • tmp_name: corresponde a una ubicación temporal que se le da al archivo mientras es procesado.
    • type: corresponde al MIME type del archivo.


  • El siguiente paso corresponde a mover el archivo desde la ubicación temporal donde se encuentra, hacia el directorio deseado.
// Se define la ubicación final del archivo.
$desired_dir = 'ruta/donde/quedara/el/archivo';
// Se comprueba si el directorio deseado existe. De no ser así, es creado.
if (is_dir($desired_dir) == false) {
  mkdir("$desired_dir", 0700);// Directorio se crea con mkdir y se le dan los permisos deseados (en este caso 0700).
}
// Se comprueba si el archivo ya existe con 'is_file()'. 
//Si ya existe, se toma la acción necesaria. 
//En el caso de este ejemplo se modifica el nombre agregando la hora al inicio con 'time()'.
if (is_file("$desired_dir/" . $file_name) == false) {
  //move_uploaded_file mueve el archivo de la ubicación temporal a la definitiva.
  move_uploaded_file($file_tmp, "/Users/camilo/Sites/pruebas/subeArchivos/uploads/" . $file_name);
} else {
  // Se modifica el nombre agregandole la hora al inicio del nombre de archivo.
  $new_dir = "/Users/camilo/Sites/pruebas/subeArchivos/uploads/" . time() . $file_name;
  // Se mueve el archivo a su nuevo directorio. 
  rename($file_tmp, $new_dir);
}
}