Cargar múltiples ficheros simultáneamente
La carga de múltiples ficheros es posible utilizando diferentes nombres en el atributo name
de la etiqueta input
.
También es posible cargar múltiples ficheros simultáneamente y obtener la información en forma de array. Para ello, se debe utilizar la sintaxis de array en los nombres de las etiquetas HTML, como se ha hecho con las selecciones múltiples y las casillas de verificación.
Ejemplo #1 Cargar múltiples ficheros simultáneamente
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Envíe múltiples ficheros: <br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" value="Enviar los ficheros" />
</form>
Cuando el formulario anterior ha sido enviado, los arrays $_FILES['userfile'], $_FILES['userfile']['name'], y $_FILES['userfile']['size'] serán inicializados.
Por ejemplo, supongamos que los ficheros /home/test/review.html y /home/test/xwp.out han sido cargados. En este caso, $_FILES['userfile']['name'][0] contiene review.html y $_FILES['userfile']['name'][1] contiene xwp.out. De manera similar, $_FILES['userfile']['size'][0] contendrá el tamaño del fichero review.html, etc.
$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] y $_FILES['userfile']['type'][0] también son creados.
Advertencia
El parámetro max_file_uploads limita el número de ficheros que pueden ser enviados en una solicitud. Se debe verificar que su formulario no intente enviar más ficheros en la solicitud de lo que permite este límite.
Ejemplo #2 Telever un directorio entero
En los campos de televersión de fichero HTML, es posible televersar un directorio entero con el atributo webkitdirectory
. Esta funcionalidad es soportada en la mayoría de los navegadores modernos.
Con la información full_path
, es posible almacenar las rutas relativas o reconstruir la misma jerarquía de directorios en el directorio.
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Envíe este directorio:<br />
<input name="userfile[]" type="file" webkitdirectory multiple />
<input type="submit" value="Enviar ficheros" />
</form>
Advertencia
El atributo webkitdirectory
no es estándar y no está actualmente en proceso de estandarización. Esto no debe ser utilizado en sitios de producción orientados al Web: no funcionará para todos los usuarios. Puede haber grandes incompatibilidades entre las implementaciones y el comportamiento puede cambiar en el futuro.
PHP analiza únicamente la información de las rutas relativas enviadas por el navegador/user-agent y transmite la información en el array $_FILES. No hay garantías de que los valores en el array full_path
contengan una verdadera estructura de directorios y la aplicación PHP no debe confiar en esta información.