Yo debo de ser realmente muy burro porque no entiendo nada...
Estoy intentando subir varios archivos mediante PHP y no hay manera. Simplificaré el caso al máximo.
Encontré un código donde "simula" la carga. Está realizado en HTML5. Simplemente lo he copiado y pegado. Tan solo modifiqué parte del formulario para poder ser enviado ya que en el ejemplo tan solo servía para probar como quedaría.
Código HTML:
Ver original
<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> .thumb { height: 75px; border: 1px solid #000; margin: 10px 5px 0 0; } </style> </head> <body> <form action="lanzar.php" enctype="multipart/form-data" method="post" > <input type="file" id="files" name='files[]' multiple='multiple' /> <input type="submit" /> <input type="reset"/> </form> <script> function handleFileSelect(evt) { var files = evt.target.files; // FileList object // Loop through the FileList and render image files as thumbnails. for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. var span = document.createElement('span'); span.innerHTML = ['<img class="thumb" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join(''); document.getElementById('list').insertBefore(span, null); }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('files').addEventListener('change', handleFileSelect, false); </script> </body> </html>
Posteriormente tengo el archivo PHP. El ejemplo está muy simplificado, pero la cuestión es que cuando le indico que me diga cuantos registros hay en el array de $_FILES da igual cuantos haya cargado antes, siempre indica 1, lo cual no creo que sea muy normal. A parte de eso solo sube la última imagen que se haya cargado previamente. Da igual si cargas tres, siempre subirá tan solo la última.
Código PHP:
Ver original
<?php foreach($_FILES['files']['name'] as $key =>$value){ $origen = $_FILES['files']['tmp_name'][$key]; $destino = "imagen/".$_FILES['files']['name'][$key]; } } ?>
¿Qué estoy haciendo mal?
Porque cuando el array por ejemplo es de un select multiple y lo traigo con POST no tengo ningún problema en recorrerlo con el foreach..