PHP $_FILES 多文件上传问题

Posted

技术标签:

【中文标题】PHP $_FILES 多文件上传问题【英文标题】:PHP $_FILES multiple file uploading problem 【发布时间】:2011-11-19 18:47:32 【问题描述】:

我在 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
(
)

那么,这里有什么问题? 谢谢你,莫尔。

【问题讨论】:

您显示的第一个数组中有错误(代码为1)。请参阅此处了解其含义:php.net/manual/en/features.file-upload.errors.php 【参考方案1】:

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

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

upload_max_filesize = 10M(或20M,或300M)修改你的php.ini;注意M - 这意味着兆字节 - 省略,会带来很多头痛。

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

Further reading.

【讨论】:

【参考方案2】:

我遇到了同样的问题.. 我所有的努力都白费了,但最后我在 PHP 手册中找到了一个很好的注释。这很简单,但非常适合我......

“如果您使用表格来显示您的 当&lt;form&gt; 元素 &lt;table&gt; 元素中时,表单输入。在这个 case 只会上传第一个文件

&lt;form&gt; 元素放在外部 元素以使其工作。”

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

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

【讨论】:

【参考方案3】:

要一次处理多个文件,请尝试给出这样的索引:

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

【讨论】:

【参考方案4】:

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

如果您没有标识符,您以后不能在 PHP 中引用您的文件。 PHP-Documentation 给你同样的提示: http://www.php.net/manual/en/features.file-upload.multiple.php

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

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

【讨论】:

其实你可以上传多个具有相同输入名称的文件,就像使用的OP一样:name[]【参考方案5】:

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的值,然后重启服务器

【讨论】:

我的 ini 文件中没有 max_file_uploads 部分,您能告诉我您使用的是哪个系统并下载指向您的 ini 文件的链接吗? @Mor你要自己修改php.ini,下载别人的不行 这很奇怪,您可以将代码复制并粘贴到您的 php.ini 文件中,这是 php.ini recommend 的内容我有 php 5.2.17【参考方案6】:

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

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

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

【讨论】:

启用log_errors 并查看服务器的error_log 我现在正在检查,到目前为止,我可以看到我是否上传了 2 个小文件它可以工作,但对于更大的文件它不会 我在 WAMP 2 32 位上运行我的代码,这就是我的 ini 上的内容 ;;;;;;;;;;;;;;;; ;文件上传; ;;;;;;;;;;;;;;;; ;是否允许 HTTP 文件上传。 ; php.net/file-uploadsfile_uploads = 开启; HTTP 上传文件的临时目录(如果未指定,将使用系统默认值)。 ; php.net/upload-tmp-dirupload_tmp_dir = "c:/wamp/tmp" ;上传文件的最大允许大小。 ; php.net/upload-max-filesizeupload_max_filesize = 2M【参考方案7】:

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

echo ini_get('max_file_uploads');

【讨论】:

我确实运行了这个命令,但什么也没出现,我还检查了 ini 文件它自己没有这样的东西

以上是关于PHP $_FILES 多文件上传问题的主要内容,如果未能解决你的问题,请参考以下文章

php 使用$_FILES 能否获得上传文件的绝对地址

101)PHP,多文件上传

php单文件上传和多文件上传

php上传文件(上传后显示图片)

php + js实现多文件上传问题

PHP原生文件上传(单文件多文件均可)简单案例