使用PHP上载多个文件的问题
我可以看到这个问题以前被问过一百万次。我已经阅读了许多回复,但似乎无法正确回答:- 我只是想上传多个文件。我确信表格是正确的。我遇到的问题是,如果我使用foreach循环,PHP会循环5次(我猜$u文件中的每个键都会循环一次) 我已经了解到,您应该在$_FILE['FILE_upload']数组中计算上载的文件,然后使用for循环,并在末尾包含索引,例如:-使用PHP上载多个文件的问题,php,file-upload,multiple-file-upload,Php,File Upload,Multiple File Upload,我可以看到这个问题以前被问过一百万次。我已经阅读了许多回复,但似乎无法正确回答:- 我只是想上传多个文件。我确信表格是正确的。我遇到的问题是,如果我使用foreach循环,PHP会循环5次(我猜$u文件中的每个键都会循环一次) 我已经了解到,您应该在$_FILE['FILE_upload']数组中计算上载的文件,然后使用for循环,并在末尾包含索引,例如:- $_FILES['file_upload']['name'][$1] 然而,当我试图访问这些值时,我只得到值的第一个字母(我想我理解这是
$_FILES['file_upload']['name'][$1]
然而,当我试图访问这些值时,我只得到值的第一个字母(我想我理解这是为什么)
我唯一能想到的就是使用
for($i ; $i<$size ; $i++){...}
因此,澄清一下——上面的代码可以工作并上传图像,但是如果循环循环5次(我假设每个$\u文件属性一次),我会收到5条错误消息。我希望这是有意义的
非常感谢您的指点
Phill将您的
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
以下内容摘自:
反过来,您应该能够修改为以下内容:
<?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");
}
}
?>
我想我不完全理解你。如果要上载多个文件,则应使用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';
嗨,阿兹,谢谢你的回复。然而,当我读到这篇文章时,我得到了以下错误:u警告:在第105行的/includes/functions.php中为foreach()提供的参数无效任何想法'为什么不转储
$\u文件['file\u upload']
。一旦我将[]添加到表单字段,这段代码就工作得很好!很抱歉让你这么愚蠢,谢谢你的帮助。嗨,赞德,非常感谢你的快速回复。但是,我在PHP手册中看到,问题在于,当我将属性添加到foreach语句时,出现了以下错误:-警告:{web path}/includes/functions.PHP第105行中为foreach()提供的参数无效。html中的文件输入字段的名称是否声明为数组类型?e、 g.name=“file_upload[]”还添加了用于上传文件的HTML表单。多么尴尬!我在表单字段中漏掉了[]。很抱歉浪费您的时间,但非常感谢您的帮助!非常感谢。呵呵,没问题。。通常是最小的错误让我们心碎。
<?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");
}
}
?>
$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';