PHP - Carga de archivos

Se puede utilizar un script PHP con un formulario HTML para permitir a los usuarios cargar archivos al servidor. Inicialmente, los archivos se cargan en un directorio temporal y luego se reubican en un destino de destino mediante un script PHP.

Información en el phpinfo.php La página describe el directorio temporal que se utiliza para cargar archivos como upload_tmp_dir y el tamaño máximo permitido de archivos que se pueden cargar se indica como upload_max_filesize. Estos parámetros se establecen en el archivo de configuración PHPphp.ini

El proceso de carga de un archivo sigue estos pasos:

  • El usuario abre la página que contiene un formulario HTML con archivos de texto, un botón para examinar y un botón para enviar.

  • El usuario hace clic en el botón de exploración y selecciona un archivo para cargar desde la PC local.

  • La ruta completa al archivo seleccionado aparece en el texto archivado y luego el usuario hace clic en el botón enviar.

  • El archivo seleccionado se envía al directorio temporal del servidor.

  • El script PHP que se especificó como controlador de formulario en el atributo de acción del formulario verifica que el archivo haya llegado y luego lo copia en un directorio deseado.

  • El script PHP confirma el éxito al usuario.

Como es habitual al escribir archivos, es necesario que tanto las ubicaciones temporales como las finales tengan permisos establecidos que permitan la escritura de archivos. Si cualquiera de ellos está configurado para ser de solo lectura, el proceso fallará.

Un archivo cargado puede ser un archivo de texto o un archivo de imagen o cualquier documento.

Creando un formulario de carga

El siguiente código HTM a continuación crea un formulario de carga. Este formulario tiene el atributo de método establecido enpost y el atributo enctype se establece en multipart/form-data

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
      
   </body>
</html>

Producirá el siguiente resultado:

Crear un script de carga

Hay una variable PHP global llamada $_FILES. Esta variable es una matriz asociada de doble dimensión y mantiene toda la información relacionada con el archivo cargado. Entonces, si el valor asignado al atributo de nombre de la entrada en el formulario de carga fuefile, luego PHP crearía las siguientes cinco variables:

  • $_FILES['file']['tmp_name'] - el archivo cargado en el directorio temporal del servidor web.

  • $_FILES['file']['name'] - el nombre real del archivo cargado.

  • $_FILES['file']['size'] - el tamaño en bytes del archivo cargado.

  • $_FILES['file']['type'] - el tipo MIME del archivo cargado.

  • $_FILES['file']['error'] - el código de error asociado con la carga de este archivo.

Ejemplo

El siguiente ejemplo debería permitir cargar imágenes y devolver el resultado como información del archivo cargado.

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
			
         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

Producirá el siguiente resultado: