Capítulo 19. El envío de archivos

Tabla de contenidos
Envío de archivos con el método POST
Errores comunes
Envío de más de un archivo
Soporte del método PUT

Envío de archivos con el método POST

PHP es capaz de recibir envíos de archivo de cualquier navegador que cumpla la norma RFC-1867 (entre los que se incluyen Netscape Navigator 3 o posterior, Microsoft Internet Explorer 3 con un parche o posterior sin éste). Ésta característica permite que los usuarios envien archivos de texto y binarios. Mediante la autentificación y funciones de manejo de archivos de PHP, es posible un control total de quién puede enviar archivos y que se hace con éstos una vez recibidos.

Es importante destacar que PHP también soporta el método PUT para envío de archivos tal y como lo utiliza Netscape Composer y el cliente Amaya de W3C. Consulte Soporte del método PUT para más detalles.

Una página de envío de archivos se puede crear mediante un formulario parecido a éste:

Ejemplo 19-1. Formulario de envío de archivo


<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Enviar este archivo: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
    
La _URL_ debe tener como destino un script PHP. El campo MAX_FILE_SIZE debe encontrarse antes del campo INPUT y su valor determina el tamaño máximo de archivo que se puede enviar en bytes. Tras la recepción del archivo se definirán en el script PHP destino las siguientes variables:

Es importante recordar que la primera palabra "$userfile" de éstas variables corresponde al nombre ("NAME=") del campo "INPUT TYPE=file" del formulario. En el ejemplo anterior usamos "userfile".

Los archivos enviados serán guardados en el directorio temporal por defecto del servidor. Podemos variar este directorio mediante la variable de entorno TMPDIR en el entorno donde corre PHP. No se puede establecer este valor usando putenv() desde un script PHP.

El script PHP que recibe el archivo enviado debe implementar las acciones que se deben llevar a cabo con el archivo acabado de recibir. Por ejemplo se podria utilizar $file_size para decidir descartar los archivos que sean demadiado pequeños o demasiado grandes. Sean cual sean las acciones a tomar se debe borrar el archivo temporal o moverlo a algún otro directorio.

El archivo recibido será eliminado inmediatamente del directorio temporal al finalizar el script PHP que lo recibió si no ha sido movido o renombrado.