我通过Google搜索找到的所有脚本都依赖于某种类型的屏幕,该屏幕首先询问用户需要上传多少文件,并且上传脚本根据该数字工作。
但是,如果我不想要任何限制,但希望允许用户上传尽可能多的或少量的内容。如何解决这个问题?
我现在拥有的只是表格:
<form enctype="multipart/form-data" method="post" action="script.php">
<input id="my_file_element" type="file" name="myFile[]" >
<input type="submit" value="Upload!" name="submit">
</form>
修改
我认为我提出问题的方式引起了一些误解。我不需要某种方法来添加更多“input type = file”字段元素。我已经使用了一个javascript,它允许用户通过单击按钮添加更多表单字段,其他字段与上面发布的第一个字段相同。
我问这个问题的方法是知道如何使用php脚本处理文件到服务器的实际上传。
答案 0 :(得分:3)
修改强>
假设您的表单是这样的
<form enctype="multipart/form-data" method="post" action="script.php">
<input id="my_file_element" type="file" name="myFile[]" >
<input id="my_file_element" type="file" name="myFile[]" >
<input id="my_file_element" type="file" name="myFile[]" >
etc...
<input type="submit" value="Upload!" name="submit">
</form>
您要做的是获取所有名为myFile[]
的文件。这是你在PHP中做的事情:
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
}
}
<强> ORIGINAL 强>
单独使用HTML和JavaScript,没有任何简单的方法可以同时上传多个文件。
我会使用Flash库(例如SWFUpload)来代替上传。使用此插件,您可以显示标准的多文件上载窗口,如this demo所示。这将允许用户在同一文件浏览器中轻松选择多个文件。
如果您出于某种原因不想使用Flash,可以使用JavaScript动态交换输入元素,如this example中所示。
答案 1 :(得分:2)
修改强>
这取决于您如何调用文件input
元素。如果您按照我的方法进行操作,则可以使用以下命令获取文件数:
if (empty($_FILES['attach']['name']))
$count_files = 0;
else
$count_files = count($_FILES['attach']['name']);
如果您对其结构有任何疑问,请尝试var_dump($_FILES)
查看完整的$_FILES
数组。
<强> ORIGINAL 强>
这样的东西,使用Javascript:
<script type="text/javascript">
var j = 2; //default two files
function novoa() {
j = j+1;
var elem = document.createElement("input");
var par = document.getElementById("filed");
elem.setAttribute("type", "file");
elem.name = "attach[]";
elem.id = "file_" + j;
par.appendChild(elem);
}
function delult() {
if (j == 0) return;
var elem = document.getElementById("file_" + j);
var par = document.getElementById("filed");
j = j-1;
par.removeChild(elem);
}
</script>
...
<p id="addupl"><a href="javascript:novoa()">More files</a> |
<a href="javascript:delult()">Less files</a></p>
<p id="filed">
<input type="file" name="attach[]" id="file_1" />
<input type="file" name="attach[]" id="file_2" />
</p>
答案 2 :(得分:1)
OMG你问的是如何处理这个表格?
手册页上有一个示例:
http://www.php.net/manual/en/features.file-upload.post-method.php
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
}
?>
答案 3 :(得分:1)
在PHP脚本中,执行var_dump($_FILES)
。输出应该可以帮助您进一步向您想要的方向移动。在使用move_uploaded_file
函数后,请查看PHP filesystem functions以获取有关如何处理文件的更多信息。
为了真正回答您的问题如何处理上传,您需要告诉我们您要完成/处理文件的内容。
答案 4 :(得分:0)
只需使用JavaScript将另一个输入元素附加到表单。