PHP $ _FILES多文件上传问题

时间:2011-09-18 18:36:44

标签: php forms file-upload upload

我在PHP中上传多个文件时遇到一些问题,

我有这个HTML格式:

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

这是upload.php:

<?php print_r( $_FILES ); ?> 

当我发送文件时,它会告诉我:

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

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

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

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

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

    )

 )

到目前为止一切顺利。

当我将表单升级到此表单时,问题就出现了:

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

现在,当我发送2个文件时,它会告诉我:

Array
(
)

那么,这里有什么问题? 谢谢,Mor。

7 个答案:

答案 0 :(得分:2)

我敢打赌你超过了post_max_size而PHP只是忽略了上传的文件。

默认为8MB。如果您尝试上传一个5MB文件,一切都会正常工作。如果您尝试上传2个5MB文件,则超过8MB,PHP会忽略发布的数据。

尝试在php.ini中增加post_max_size的值。

答案 1 :(得分:1)

这里有很多建议。我会试一试。这是基于@Pekka的评论。

我看到你正在测试mp3,这可能超过PHP上传限制。这是因为在您的第一个示例中,您实际上有一个上传错误代码1:The uploaded file exceeds the upload_max_filesize directive in php.ini.。所以即使你的拳头上传也无效。成功上传的错误代码始终为0。

使用upload_max_filesize = 10M(或20M300M修改php.ini;小心M - 这意味着兆字节 - 省略,带来了很多头痛。

我建议使用较小的文件进行测试,因为我发现上传的限制为2M。

Further reading

答案 2 :(得分:0)

检查您的max_file_uploads设置 - 是否超过1?

echo ini_get('max_file_uploads');

答案 3 :(得分:0)

php.ini文件必须包含以下内容:

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

更改upload_max_filesize的值,然后重新启动服务器

答案 4 :(得分:0)

问题是您的输入元素上的name="myfile[]"属性。

如果您没有标识符,则无法在以后将PHP引用到您的文件中。 PHP文档为您提供了相同的提示: http://www.php.net/manual/en/features.file-upload.multiple.php

  

可以使用不同的名称上传多个文件进行输入。

因此,将名称更改为“myfile1”和“myfile2”(或更好的名称;))可以解决您的问题。

答案 5 :(得分:0)

要一次执行多个文件,请尝试提供如下索引:

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

答案 6 :(得分:0)

我遇到了同样的问题..我所有的努力都是徒劳的,但最后我在PHP手册上找到了一个很好的说明。这很简单但很适合我...

  

“如果您使用表格显示您的内容,则多次上传可能无效   当<form>元素 <table>元素时,表单输入。在这   case 只会上传第一个文件

     

<form>元素放在元素之外,以使其正常工作。“

请点击此链接查看完整备注,有一个功能可以以易于使用的方式重新排列多个上传文件阵列。

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