使用多个 & php 上传文件
Posted
技术标签:
【中文标题】使用多个 & php 上传文件【英文标题】:uploading file using multiple & php 【发布时间】:2013-12-09 18:39:11 【问题描述】:我正在尝试使用以下代码上传文件:
echo "<form method='POST' action='uploadfile.php?action=addok' enctype='multipart/form-data'>
<input type=\"file\" multiple=\"true\" name=\"userfile[]\" />
<input type='submit' value=' add '>
</form>";
if ($_GET['action'] == 'addok')
echo "\$_FILES['userfile']=".count($_FILES['userfile'])."<br />\$_FILES['userfile']['name']=".count($_FILES['userfile']['name'])."<br />\$_FILES=".count($_FILES)."<br />";
它只为所有计数返回 0。 如果我只上传 1 个,它会返回计数,否则 .. 什么都没有 .. 我从昨天开始就在尝试解决它的问题。 有人可以帮忙吗?
【问题讨论】:
改为var_dump($_FILES)
看看里面有什么。当您进行多个同名上传时,PHP 有一些关于如何构建 $_FILES 的真正愚蠢的想法。
以上方法是什么?
我猜你的returns 0
是因为你试图一次上传多个文件。如果是这种情况,那么您将需要一个foreach
- “它只返回 0 表示 all 计数。如果我只上传 1 个”
我的意思是下面:),我早上写了第一行代码,当时我在我的问题之前写了代码,忘记仔细检查了。
@fred-ii- 我只是没有运气,同样的问题..
【参考方案1】:
if ($_GET['action'] == 'addok')
foreach($_FILES['userfile'] as $key=>$val)
print_r($val);
【讨论】:
你试过这个var_dump($_FILES['userfile']);
多上传时,返回NULL
您是否选择了文件并点击了添加按钮?【参考方案2】:
您正在计算 $_FILES,它始终为 1:
尝试:
echo "<form method='POST' action='uploadfile.php?action=addok' enctype='multipart/form-data'>
<input type=\"file\" multiple=\"true\" name=\"userfile[]\" />
<input type='submit' value=' add '>
</form>";
if ($_GET['action'] == 'addok')
echo "<pre>";
print_r($_FILES);
echo "</pre>";
echo "\$_FILES['userfile']=".count($_FILES['userfile'])."<br />\$_FILES['userfile']['name']=".count($_FILES['userfile']['name'])."<br />\$_FILES=".count($_FILES['userfile']['name'])."<br />";
print_r:
Array
(
[userfile] => Array
(
[name] => Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file3.txt
)
[type] => Array
(
[0] => text/plain
[1] => text/plain
[2] => text/plain
)
[tmp_name] => Array
(
[0] => C:\wamp\tmp\php1F5C.tmp
[1] => C:\wamp\tmp\php1F5D.tmp
[2] => C:\wamp\tmp\php1F5E.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[size] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
)
)
结果:
$_FILES['userfile']=5
$_FILES['userfile']['name']=3
$_FILES=3
【讨论】:
也不起作用..返回:Array ( ) $_FILES['userfile']=0 $_FILES['userfile']['name']=0 $_FILES=0
自己尝试一下:hussein.be/tst.php 也在本地主机上不起作用..
如果我选择 1 个文件,它工作正常,如果我选择超过 1 个文件,$_FILES 为空..【参考方案3】:
检查你的 php.ini,函数 max_file_uploads() 的值应该大于 1
那就试试这个,
<form method="post" action="uploadfile.php?action=addok" enctype="multipart/form-data">
<input type="file" name="userfile[]" multiple>
<input type="submit" value="UPLOAD">
</form>
$folder = “/home/username/www/uploading/”;
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $folder.$HTTP_POST_FILES['userfile']['name']))
Echo “File uploaded”;
else
Echo “File not moved to destination folder. Check permissions”;
;
else
Echo “File is not uploaded.”;
;
您需要确保您的上传文件夹具有正确的权限。 chmod -R 777 更改权限,以便 php 可以上传到该文件夹。
需要注意的是,IE http://caniuse.com/#feat=fileapi
html5 input type file's multiple attribute not working in IE?
【讨论】:
你检查你的权限了吗? 是的,我也在我的本地主机上试过。什么都没有..正如我在其他帖子中提到的,它仅适用于单个文件。! 从输入中删除多个并尝试。然后再添加 2 个输入字段的副本,看看它是否适用。 你检查过你的php.ini吗,函数max_file_uploads()的值应该大于1。 设置为 20 . 并且代码适用于单次上传,但不适用于多个..【参考方案4】:解决方案::
看来问题不在代码中,而是在浏览器中。
由于插件或我认为的其他问题,它无法在 firefox、opera 或 chrome 中运行。
我确实在安全模式 click shift + firefox icon to open in safe mode
下运行了 firefox,它工作正常。
这是万一有人再次遇到同样的问题。
注意: 如果有人知道如何检测此问题并警告用户,请成为我的热情:)
【讨论】:
以上是关于使用多个 & php 上传文件的主要内容,如果未能解决你的问题,请参考以下文章