我可以看到这个问题之前被问了一百万次。我经历了很多回复,似乎无法做到正确: -
我只是想上传多个文件。我确定表格是正确的。我得到的问题是,如果我使用foreach循环,PHP会循环5次(对于$ _FILES中的每个键,我猜一次)。
我已经读过你应该计算$ _FILE ['file_upload']数组中的上传文件,然后使用for循环,并在最后包含一个索引,例如: -
$_FILES['file_upload']['name'][$1]
但是,当我尝试访问这些值时,我只得到值的第一个字母(我想我明白为什么会这样)。
我唯一能想到的就是使用
for($i ; $i<$size ; $i++){...}
然后在其中嵌入一个foreach循环,但是,这似乎效率低下,我没有看到其他建议。
因此,如果有人可以一劳永逸地让我直截了当,我将永远感激不尽。我的代码在这里: -foreach ($_FILES['file_upload'] as $key => $value){
$tmp_file = $_FILES['file_upload']['tmp_name'];
$target_file = basename($_FILES['file_upload']['name']);
if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
$message = "File uploaded successfully";
} else {
$error = $_FILES['file_upload']['error']; // get the error
$_SESSION['errors'][] = $error_msg[$error];// return the error that matches
}// end if
} // end for
所以只是为了澄清 - 上面的代码工作并上传图像,但循环循环5次(我假设每个$ _FILES属性一次),我收到5条错误消息。我希望这是有道理的。
非常感谢任何指针
菲尔
答案 0 :(得分:1)
以下摘自:PHP Manual
<?php
$uploads_dir = '/uploads';
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, "$uploads_dir/$name");
}
}
?>
反过来你应该能够修改为这样的东西:
<?php
$uploads_dir = '/uploads';
foreach ($_FILES["file_upload"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file_upload"]["tmp_name"][$key];
$name = $_FILES["file_upload"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
答案 1 :(得分:0)
将您的foreach
更改为此
foreach ($_FILES['file_upload']['tmp_name'] as $key => $value){
$tmp_file = $_FILES['file_upload']['tmp_name'][$key];
$target_file = basename($_FILES['file_upload']['name'][$key]);
if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
$message = "File uploaded successfully";
} else {
$error = $_FILES['file_upload']['error'][$key]; // get the error
$_SESSION['errors'][] = $error_msg[$error];// return the error that matches
}// end if
} // end for
答案 2 :(得分:0)
我不认为我完全理解你。如果要上传多个文件,则应使用foreach(无需计数器)。
您应该使用的唯一计数器是计算成功上传的文件数。
试试这个:
$success = 0;
foreach ($_FILES['files']['name'] as $file => $name){
$tmp_file = $_FILES["files"]["tmp_name"][$file];
$target_file = $name;
if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
$message = "File uploaded successfully";
$success++;
} else {
$error = $_FILES['file_upload']['error']; // get the error
$_SESSION['errors'][] = $error_msg[$error];// return the error that matches
}// end if
} // end for
echo $success.' files were uploaded';