是的,我知道有数百个类似的问题,但我找不到合适的答案...... 问题是:我想上传多个文件...... 正确的方法应该是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="?u=1">
<input type="file" name="myFile[]" />
<input type="file" name="myFile[]" />
<input type="file" name="myFile[]" />
<input type="submit" value="Upload!" name="submit"/>
</form>
<?
if ($_GET['u']){
foreach ($_FILES["myFile"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["myFile"]["tmp_name"][$key];
$name = $_FILES["myFile"]["name"][$key];
// here we move it to a directory called data
// you can move it wherever you want
move_uploaded_file($tmp_name, "/data/$name");
} else {
// an error occurred, handle it here
}
}
}
if (!$_FILES){
echo 'WTF?? No files sent?? There\'s a problem! Let\' hope that stack overflow will solve it!';
}
?>
</body>
</html>
输出结果为:
Notice: Undefined index: myFile in C:\xampp\htdocs\php\prova.php on line 18
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\php\prova.php on line 18
没有发送文件?有问题!如何访问从数组输入标记上传的文件?
答案 0 :(得分:0)
我认为使用$_POST
或$_FILES
代替$_GET['u']
来验证提交,可以解决问题......
此外,您可以使用<input type="file" name="myFile[]" multiple />
一次,而不是使用<input type="file">
来进行多个文件选择。
注意:检查php.ini以了解以下设置:(根据需要进行编辑,保存并重新启动服务器)
这可以在我的wamp服务器中使用上述更改&amp;设置......祝你好运!
答案 1 :(得分:0)
嗯,上传文件的最简单方法是表现得就像只有一个文件一样,并为你拥有的每个其他文件重复这个过程,你所要做的就是为你的输入命名。我建议使用多文件输入:
<input type="file" name="file[]" id="file" multiple>
然后,您可以使用以下内容处理上传:
if(isset($_FILES['file']['tmp_name']))
{
//set upload directory
$target_dir = "uploads/";
$num_files = count($_FILES['file']['tmp_name']);
for($i=0; $i < $num_files;$i++)
{
if(!is_uploaded_file($_FILES['file']['tmp_name'][$i]))
{
$messages[] = 'No file uploaded';
}
else
{
if(@copy($_FILES['file']['tmp_name'][$i],$target_dir.'/'.$form['name']->getData()."/".$_FILES['file']['name'][$i]))
{
$messages[] = $_FILES['file']['name'][$i].' uploaded';
}
else
{
$messages[] = 'Uploading '.$_FILES['file']['name'][$i].' Failed';
}
}
}
}
您可以使用copy或move_uploaded_file将文件移动到您的目录。
答案 2 :(得分:-1)
我检查了你的代码,发现改变了这一行:
move_uploaded_file($tmp_name, "/data/$name");
到
move_uploaded_file($tmp_name, "data/$name");
[改变相对路径的绝对路径]
诀窍。现在它在我的本地服务器上工作正常。那应该为你解决。