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 手册中找到了一个很好的注释。这很简单,但非常适合我......
“如果您使用表格来显示您的 当
<form>
元素在<table>
元素中时,表单输入。在这个 case 只会上传第一个文件。将
<form>
元素放在外部 元素以使其工作。”
点击此链接查看完整注释,有一个以易于使用的方式重新排列多个上传文件数组的功能。
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 多文件上传问题的主要内容,如果未能解决你的问题,请参考以下文章