2010-10-20 22 views
7

Estoy tratando de cargar varios archivos usando HTML5. Este es mi código que encontré en algún sitio. En el código PHP, no lo reconoce como una matriz.Cargar varios archivos usando HTML5 y PHP

¿Estoy haciendo algo mal? ¿Alguien puede mostrarme una solución de trabajo?

Gracias.

index.html

<form action='save.php' method='post' enctype='multipart/form-data'> 
<input name="uploads" type="file" multiple="multiple" /> 
<input type='submit' value="Upload File"> 
</form> 

save.php las variables

function GetFiles() { 
     $files = array(); 
     $fdata = $_FILES["uploads"]; 
     if (is_array($fdata["name"])) {//This is the problem 
       for ($i = 0; $i < count($fdata['name']); ++$i) { 
         $files[] = array(
          'name' => $fdata['name'][$i], 
          'tmp_name' => $fdata['tmp_name'][$i], 
         ); 
       } 
     } else { 
       $files[] = $fdata; 
     } 

     foreach ($files as $file) { 
       // uploaded location of file is $file['tmp_name'] 
       // original filename of file is $file['file'] 
     } 
} 
+0

Las respuestas a continuación han resuelto correctamente el problema, y ​​aquí es una página con un ejemplo de trabajo completo que podría ayudar a otra persona que se topa con esta página: http://tiffanybbrown.com/2011/03/29/quick -php-tip-uploading-multiple-files-in-html5/ –

Respuesta

8

Necesitas hacer algún tipo de arreglo del nombre:

<input name="uploads[]" type="file" multiple="multiple" /> 

Al igual que solía hacer cuando se utiliza casillas de verificación.

+0

gracias! Eso hizo el truco. :) –

5

forma que son matrices debe ser nombrado con un [], de lo contrario PHP no lo ve como una matriz. Entonces:

<form action='save.php' method='post' enctype='multipart/form-data'> 
<input name="uploads[]" type="file" multiple="multiple" /> 
<input type='submit' value="Upload File"> 
</form> 

debería hacerlo.

1

Sé que este es un tipo de un hilo viejo, pero utilizo este pequeño script para convertir el (a mí) confuso diseño de la matriz $ _FILES a una forma más legible. Name_input es el nombre que le dio al objeto de entrada en HTML.

for($i=0; $i<count($_FILES['name_input']['name']); $i++) { 
    $betterfiles[] = array(
     "name" => $_FILES['name_input']['name'][$i], 
     "type" => $_FILES['name_input']['type'][$i], 
     "tmp_name" => $_FILES['name_input']['tmp_name'][$i], 
     "error" => $_FILES['name_input']['error'][$i], 
     "size" => $_FILES['name_input']['size'][$i] 
    ); 
} 
Cuestiones relacionadas