Subir archivo a servidor

From Wiki de Caballero
Jump to navigation Jump to search

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);
}
}