Prácticamente en cualquier proyecto web nos encontramos con la necesidad de realizar un upload de archivos. Puede que solo necesitemos que cada usuario suba su avatar, subir imágenes a una galería fotográfica, o simplemente para adjuntar un archivo a los distintos contenidos de nuestra web.

Creando el formulario para subir el archivo

Para empezar con la subida, lo primero que necesitamos es un formulario en el cual podamos seleccionar el archivo que queremos subir, y realizar el envío. El tipo de campo de formulario que nos permite navegar por los archivos de nuestro ordenador, y seleccionar el que deseamos subir es file.

Con este campo ya podremos seleccionar el archivo a subir, pero para que funcione, tenemos que indicar al navegador el encoding de nuestro formulario, el cual será multipart/form-data.

Con esto ya podemos subir nuestro fichero. El formulario quedará similar al siguiente:

Procesando la subida del archivo con PHP

PHP dispone de la variable $_FILES

[] en la que se almacenan los datos de los ficheros subidos. Esta variable es un array compuesto por los distintos archivos subidos. Cada uno de estos archivos, es a su vez un array que contiene los siguientes elementos:

  • ‘name’: Nombre original del archivo, con la extensión.
  • ‘type‘: Tipo MIME del archivo.
  • ‘tmp_name’: Nombre temporal que se le asigna al archivo cuando se sube a la carpeta temporal antes de moverlo.
  • ‘error’: Contiene el código númerico correspondiente al error que se ha producido al subir el archivo. Se pueden dar los siguientes errores:
    • 0: No ha ocurrido ningún error, el fichero se ha subido con exito.
    • 1: El fichero subido excede el tamaño máximo fijado en php.ini por la directiva upload_max_filesize.
    • 2: El fichero subido excede el tamaño máximo fijado en el formulario por el campo oculto MAX_FILE_SIZE.
    • 3: El fichero se ha subido parcialmente.
    • 4: No se ha subido ningún archivo.
    • 6: No se ha encontrado el directorio temporal.
    • 7: No se ha podido escribir el fichero en el disco.
    • 8: Una extensión de PHP ha detenido la subida del archivo.
  • ‘size’: Tamaño en bytes del archivo subido.

Cuando recibimos el archivo en PHP, el fichero subido se encuentra en la carpeta temporal que indique la configuración de PHP. Por eso, ahora debemos proceder a mover este archivo a la carpeta en la que deseemos alojarlo. Para esto, PHP pone a nuestra disposición la función move_uploaded_file, la cual tiene la siguiente sintaxis:

Esta función devuelve un booleano: true si se ha movido correctamente, false si ha ocurrido algún error.

El código completo para guardar el archivo subido, tras comprobar que no haya errores en la subida, podría quedar como el siguiente: