Múltiplos arquivos podem ser enviados usando diferentes nomes (name) para entradas (input).
Também é possível carregar vários arquivos simultaneamente e ter a informação automaticamente organizada em arrays. Para isso, é necessário usar a mesma sintaxe das arrays submetidas pelo formulário HTML que você usa para múltiplos selects e checkboxes:
Exemplo #1 Carregando múltiplos arquivos
<form action="file-upload.php" method="post" enctype="multipart/form-data"> Envie esses arquivos:<br /> <input name="userfile[]" type="file" /><br /> <input name="userfile[]" type="file" /><br /> <input type="submit" value="Enviar arquivos" /> </form>
Quando o formulário acima é submetido, as arrays $_FILES['userfile'], $_FILES['userfile']['name'], e $_FILES['userfile']['size'] serão inicializadas (assim como $HTTP_POST_FILES para versões do PHP anteriores a 4.1.0). Quando o parâmetro register_globals está ativo, globals para os arquivos enviados também são inicializadas. Cada um deles será uma array dos valores apropriados, indexada numéricamente, para os arquivos submetidos.
Por exemplo, suponha os nomes dos arquivos /home/test/review.html e /home/test/xwp.out. Neste caso, $_FILES['userfile']['name'][0] deve conter o valor review.html, e $_FILES['userfile']['name'][1] deve conter o valor xwp.out. Similarmente, $_FILES['userfile']['size'][0] deve conter o tamanho do arquivo review.html, e assim por diante.
$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0], e $_FILES['userfile']['type'][0] também são definidas.
Desde o PHP 5.2.12, a definição da configuração do parâmetro max_file_uploads atua como um limite no número de arquivos que podem ser enviados em umá única requisição. Você precisa ter certeza que seu formulário não tentará enviar mais arquivos que o limite definido.