# Cargar archivos

Esta página explica cómo hacer que un formulario envíe un archivo al servidor y cómo hacer que éste lo procese.

## Configuración de PHP

Para poder recibir archivos, debes tener establecidas las siguientes directivas de configuración en el archivo PHP.ini

- file_uploads: (On / Off), pemite que haya o no cargas de archivos
- uploads_max_filesize: tamaño máximo del archivo que se puede subir
- upload_tmp_dir: directorio temporal donde se guardan los archivos cargados
- post_max_size: tamaño máximo de los datos enviados por el método post

## Formulario

Un formulario puede enviar un archivo al servidor mediante un control de tipo file. El formulario sería:

    <form action="carga_archivos.php" method="post" enctype="multipart/form-data">
      <input type="file" name="nombre_archivo_cliente" /><br />
      <input type="submit" name="enviar" value="Enviar" />
    </form>

Es importante que el atributo method tenga el valor post y que el atributo enctype tenga el valor multipart/form-data.

El aspecto del formulario dependerá del navegador que utilices. En este navegador sería:

## Script PHP

Cuando PHP recibe el archivo, lo almacena en el directorio upload_tmp_dir y rellena la matriz asociativa superglobal $_FILES["nombre_archivo_cliente"] (el nombre que se haya dado al control en el formulario). Esa matriz contiene los siguientes elementos:

- $_FILES['nombre_archivo_cliente']['name']: nombre que tenía el archivo cargado en el ordenador del cliente
- $_FILES['nombre_archivo_cliente']['type']: tipo MIME del archivo cargado
- $_FILES['nombre_archivo_cliente']['size']: tamaño del archivo cargado
- $_FILES['nombre_archivo_cliente']['tmp_name']: nombre del archivo cargado en el directorio temporal del servidor
- $_FILES['nombre_archivo_cliente']['error']: código de error (en su caso)

Como el archivo del directorio temporal desaparecerá al acabar el script, es necesario copiar el archivo a otro lugar. Para ello utiliza la función move_uploaded_file($origen, $destino), en la que $origen es el nombre del archivo cargado en el directorio temporal (normalmente puedes utilizar directamente $_FILES['nombre_archivo_cliente']['tmp_name']) y $destino el nombre del archivo que contendrá la copia.

Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.