2011-09-18 13 views
5

ho un piccolo problema con il caricamento di più file in PHP,

ho questo modulo HTML:

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

e questa è l'upload.php:

<?php print_r($_FILES); ?> 

quando sto inviando un file, mostrare me questo:

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

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

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

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

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

    ) 

) 

fin qui tutto bene.

Il problema inizia quando aggiorno il mio modulo a questo:

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

ora, quando i inviare 2 file, show me questo:

Array 
(
) 

così, qual è il problema qui? grazie, Mor.

+0

Hai un errore nella prima matrice si mostrano (con il codice '1') Vedi qui per quello che significa:... http: // www .php.net/manuale/it/features.file -upload.errors.php –

risposta

1

Un sacco di suggerimenti qui. Ci provo. Questo è basato sul commento di @Pekka.

Vedo che stai testando con mp3, che probabilmente superano il limite di caricamento PHP. Questo perché nel tuo primo esempio, hai effettivamente un codice di errore di caricamento 1: The uploaded file exceeds the upload_max_filesize directive in php.ini.. Quindi anche il tuo pugno di caricamento non ha funzionato. Un caricamento completato ha sempre 0 come codice di errore.

Modifica si php.ini con upload_max_filesize = 10M (o 20M, oppure 300M; attenti a questo M - il che significa megabyte - come omesso, porta un sacco di mal di testa

suggerisco test con file più piccoli, come ho. Vedo che avete un limite di 2M per il caricamento

Further reading

0

Verificare l'impostazione max_file_uploads - è più di 1?

echo ini_get('max_file_uploads'); 
+0

ho fatto eseguire questo comando ma non è venuto fuori nulla, ho anche controllato il file ini da solo non ha una cosa del genere –

1

Sono pronto a scommettere che si è ecceduto post_max_size e PHP semplicemente ignorato i file caricati.

L'impostazione predefinita è 8 MB. Se provi a caricare un file da 5 MB, tutto funzionerà. Se provi a caricare 2 file da 5 MB, supera i 8 MB e PHP ignora i dati inviati.

Prova ad aumentare il valore di post_max_size nel tuo php.ini.

+0

ho fatto, nulla è cambiato. –

+0

abilitare [log_errors] (http://php.net/log_errors) e guardare error_log – arnaud576875

+0

im del server controllando ora, fino ad ora posso vedere se carico 2 file di piccole dimensioni funziona, ma con file più grandi non ci vorrà –

0

Il file php.ini deve avere qualcosa di simile:

;;;;;;;;;;;;;;;; 
; 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 

modificare i valori di upload_max_filesize e quindi riavviare il server

+0

io non hanno la parte max_file_uploads sul mio file ini, mi puoi dire quale sistema si lavora con e scaricare link per sei file ini? –

+0

@Mor è necessario modificare il proprio php.ini, non va bene scaricano qualcun altro –

+0

che è strano, è possibile copiare e incollare il codice in voi file php.ini e questo è il contenuto dei [php.ini consiglia] (http://pastebin.com/QAebhauV) Ho php 5.2.17 – tttony

0

Il problema è l'attributo name="myfile[]" sul vostro input-Element.

Non puoi fare riferimento più tardi in PHP al tuo file, se non hai un identificatore per questo. Il PHP-documentazione si dà lo stesso suggerimento: http://www.php.net/manual/en/features.file-upload.multiple.php

più file possono essere caricati utilizzando in input nomi differenti.

Quindi modificare il nome in "myfile1" e "myfile2" (o un nome migliore;)) dovrebbe risolvere il problema.

+0

In realtà, * è possibile * caricare più file con lo stesso nome di input, proprio come OP usato: 'name []'. – nevvermind

0

Per fare più file contemporaneamente, provare a dare un indice di come questo:

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

Ho avuto lo stesso problema .. Tutti i miei sforzi sono stati vani, ma alla fine ho trovato un buon nota alla PHP Manuale. È semplice ma mi si adatta perfettamente ...

"caricare più potrebbe non funzionare se si utilizza un tavolo per la visualizzazione delle vostre input di form quando <form> elemento è all'interno l'elemento <table>. In questo caso verrà caricato solo il primo file.

Mettere il <form> elemento di fuori l'elemento per farlo funzionare ".

Seguire questo collegamento per la nota completa, c'è una funzione per riorganizzare l'array di file di upload multipli in un modo facile da usare.

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