2011-09-18 23 views
5

Tengo un pequeño problema con la carga de varios archivos en PHP,

tengo este formulario html:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

y este es el upload.php:

<?php print_r($_FILES); ?> 

cuando estoy enviando un archivo que me muestran lo siguiente:

Array 
(
[myfile] => Array 
    (
     [name] => Array 
      (
       [0] => Krw_Qe4QKmI.mp3 
      ) 

     [type] => Array 
      (
       [0] => 
      ) 

     [tmp_name] => Array 
      (
       [0] => 
      ) 

     [error] => Array 
      (
       [0] => 1 
      ) 

     [size] => Array 
      (
       [0] => 0 
      ) 

    ) 

) 

hasta ahora todo bien.

El problema comienza cuando se actualiza el formulario para éste:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

ahora, cuando envío 2 archivos, me muestro esto:

Array 
(
) 

es así, ¿cuál es el problema aquí? gracias, Mor.

+0

usted tiene un error en la primera matriz que muestran (con el código de '1') Vea aquí lo que significa:... http: // www .php.net/manual/es/features.file -upload.errors.php –

Respuesta

1

Una gran cantidad de sugerencias aquí. Voy a darle una oportunidad. Esto se basa en el comentario de @Pekka.

Veo que está probando con mp3, que probablemente exceda el límite de carga de PHP. Esto se debe a que en su primer ejemplo, realmente tiene un código de error de carga 1: The uploaded file exceeds the upload_max_filesize directive in php.ini.. Así que incluso tu primera carga no funcionó. Una carga exitosa siempre tiene 0 como el código de error.

Modificar que php.ini con upload_max_filesize = 10M (o 20M, o 300M; cuidado con eso M - lo que significa megabytes - como se omite, trae un montón de dolor de cabeza

que sugieren las pruebas con archivos más pequeños, como yo. Veo que tiene un límite de 2 M para cargar

Further reading

0

Compruebe su configuración max_file_uploads - ¿es más de 1?

echo ini_get('max_file_uploads'); 
+0

sí ejecuté este comando pero no apareció nada, también revisé el archivo ini en sí mismo, no tiene tal cosa –

1

Apostaría que ha excedido post_max_size y PHP simplemente ignorado los archivos subidos.

Son 8 MB por defecto. Si intenta subir un archivo de 5MB, todo funcionará. Si intenta subir 2 archivos de 5 MB, excede los 8 MB y PHP ignora los datos publicados.

Intenta aumentar el valor de post_max_size en tu php.ini.

+0

lo hice, nada cambió. –

+0

habilite [log_errors] (http://php.net/log_errors) y mire el error_log de su servidor – arnaud576875

+0

estoy revisando ahora, hasta ahora puedo ver si cargo 2 archivos pequeños, pero funciona con archivos más grandes que no –

0

El archivo php.ini debe tener algo como esto:

;;;;;;;;;;;;;;;; 
; File Uploads ; 
;;;;;;;;;;;;;;;; 

; Whether to allow HTTP file uploads. 
file_uploads = On 

; Temporary directory for HTTP uploaded files (will use system default if not 
; specified). 
;upload_tmp_dir = 

; Maximum allowed size for uploaded files. 
upload_max_filesize = 50M 


; Maximum number of files that can be uploaded via a single request 
max_file_uploads = 20 

cambiar los valores de upload_max_filesize y luego reiniciar el servidor

+0

No tengo la parte max_file_uploads en mi archivo ini, ¿puede decirme con qué sistema trabaja y descargar el enlace a su archivo ini? –

+0

@Mor necesita modificar su propio php.ini, no es bueno descargar el –

+0

de otra persona que es raro, puede copiar y pegar el código en su archivo php.ini y este es el contenido de la [php.ini recommend] (http://pastebin.com/QAebhauV) Tengo php 5.2.17 – tttony

0

El problema es su name="myfile[]" atributo en la entrada-Element.

No puedes referir más tarde en PHP a tu archivo, si no tienes un identificador para él. El PHP-Documentación le da la misma pista: http://www.php.net/manual/en/features.file-upload.multiple.php

Varios archivos se pueden cargar con nombre diferente para la entrada.

Así que cambie el nombre a "myfile1" y "myfile2" (o algún nombre mejor;)) debería resolver su problema.

+0

En realidad, * puede * cargar múltiples archivos con el mismo nombre de entrada, al igual que OP utilizado: 'nombre []'. – nevvermind

0

Para hacer múltiples archivos a la vez, trate de darle un índice de esta manera:

<? For ($count = 0; count < SOME_MAXIMUM; ++$count;): ?> 
<input type="file" name="myfile[<? Echo $count; ?>]" /> 
<? endfor; ?> 
0

que tenía el mismo problema .. Todos mis esfuerzos fueron en vano, pero finalmente he encontrado una muy buena nota en el PHP Manual. Es simple pero me queda perfectamente ...

"carga múltiple podría no funcionar si se utiliza una tabla para mostrar sus entradas de formulario cuando <form> elemento es dentro el elemento <table>. En este caso sólo el primer archivo se cargará.

Ponga el elemento <form>fuera del elemento para que funcione. "

Siga este enlace para obtener la nota completa, hay una función para reorganizar la matriz de múltiples archivos de carga de una manera fácil de usar.

http://php.net/manual/en/features.file-upload.multiple.php

Cuestiones relacionadas