Cargar múltiples archivos desde el cliente al servidor: uso de FILES

Código fuente PHP

// 020-CodigoPHP.php
// Versión 1.0 31/12/2017 Juan Manuel Cueva Lovelle. Universidad de Oviedo
// Versión 1.1 04/12/2018 Se cierran las etiquetas input

// Método POST de HTTP - Los datos enviados van a través de la cabecera HTTP
// Método POST de HTTP - La seguridad depende del protocolo HTTP
// Método POST de HTTP - Si se usa HTTP seguro se puede transmitir la información de forma segura
// Método POST de HTTP - No tiene restricciones en el tamaño de los datos enviados
// Método POST de HTTP - Puede utilizar tanto datos en texto como datos binarios

// form enctype='multipart/form-data' - Los caracteres no están codificados. Es obligatorio para cargar archivos

// $_FILES - Es una variable predefinida en PHP
// $_FILES - Es superglobal en PHP
// $_FILES - Es un array asociativo de variables en dos dimensiones que almacena toda la información relativa al archivo cargado
// $_FILES['archivoCliente']['tmp_name'] - El archivo cargado en un directorio temporal en el servidor Web
// $_FILES['archivoCliente']['name'] - El nombre actual del archivo cargado
// $_FILES['archivoCliente']['size'] - El tamaño en bytes del archivo cargado
// $_FILES['archivoCliente']['type'] - El tipo MIME del archivo cargado
// $_FILES['archivoCliente']['error'] - El código de error asociado con el archivo cargado

// UPLOAD_ERR_OK - Valor: 0 - No hay error, archivo cargado con éxito
// UPLOAD_ERR_OK - Valor: 1 - El archivo cargado excede del tamaño máximo permitido. Se define en upload_max_filesize en php.ini

// max_file_uploads - define el límite máximo del número de archivos que se pueden cargar en una petición
// max_file_uploads - por defecto es 20
// max_file_uploads - su valor se puede consultar con phpinfo()

echo "
        <form action='#' method='post' enctype='multipart/form-data'>
            <p>Selección múltiple de archivos a cargar desde la máquina cliente</p> 
            <p>
                <input type='file' multiple='multiple' name='archivo[]'/>
            </p>
            <p>
                <input type='submit' value='Enviar'/>
            </p>
        </form>
    ";

if ($_FILES) {
    echo "<h3>Información de los archivos cargados desde la máquina cliente</h3>";

    $numeroArchivos =  count($_FILES['archivo']['name']);

    echo "<h4>Número de archivos cargados desde la máquina cliente: " . $numeroArchivos . "</h4>";

    for($i=0;$i<$numeroArchivos;$i++){
        echo "<ul><li>Nombre [" . $i . "] : " . $_FILES['archivo']['name'][$i] . "</li>";
        echo "<li>Tamaño [" . $i . "] : " . $_FILES['archivo']['size'][$i] . " bytes</li>";
        echo "<li>Tipo [" . $i . "] : " . $_FILES['archivo']['type'][$i] . "</li></ul>";
    }
                         
    echo "<h4>Contenido del array asociativo _FILES</h4>";
    echo "<pre>";
    print_r($_FILES); //Imprime el contenido del array asociativo
    echo "</pre>"; 

    // Solamente se muestran los archivos de texto
    for($i=0;$i<$numeroArchivos;$i++){
        $tipo = substr($_FILES['archivo']['type'][$i], 0, 4);
        if( strcmp($tipo, 'text') == 0) {
            echo "<h4>Contenido del archivo [" . $i . "] : " . $_FILES['archivo']['name'][$i] . "</h4>";
            $fp = fopen($_FILES['archivo']['tmp_name'][$i], 'rb');
            while ( ($linea = fgets($fp)) !== false) {
                echo "<p>" . $linea . "</p>";
            }
        }
    }
}

Ejecución del código PHP

Selección múltiple de archivos a cargar desde la máquina cliente