我有一些代码允许用户一次上传多个文件。在上传之后它永远不会到达特定点,所以我输入一个echo来测试错误代码的值,并且它返回一个我不确定我理解的值。这是代码:
$tmpTarget = PCBUG_UPLOADPATH;
foreach ($_FILES["attachments"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["attachments"]["tmp_name"][$key];
$name = str_replace(" ", "_", $_FILES["attachments"]["name"][$key]);
move_uploaded_file($tmp_name, "$tmpTarget/$name");
@unlink($_FILES["attachments"]["tmp_name"][$key]);
}
else {
$errorFlag = true;
echo "error = $error";
exit;
}
}
创建附件字段的代码如下所示:
for($i=1; $i<=$max_no_img; $i++){
echo "<input type=file name='attachments[]' class='bginput'><br />";
}
其中$max_no_img
是代码中设置的变量,PCBUG_UPLOAD
路径是包含文件中定义的常量。
这是令人困惑的:在我提交表单后,我会查看我的上传目录,我通过表单选择的文件就在那里 - 他们正确上传。但是,代码跳转到else子句,$ error返回4,the php manual表示没有上传文件。
有什么想法吗?这些文件非常明显地得到了应有的位置。是否有其他“上传”的定义没有发生?
答案 0 :(得分:0)
当浏览器不发送文件时发生错误,但是当PHP将发送文件的文件名解释为空字符串时(参见main/rfc1867.c)。
尝试在表单上强制使用字符集,如下所示:
<form accept-charset="utf-8" enctype="multipart/form-data" method="post" action="dest.php">
如果它不起作用,请嗅探发送文件的HTTP请求(例如使用wireshark)并发布结果。另请尝试其他浏览器。
编辑:您的浏览器只发送一个文件。 UPLOAD_ERR_NO_FILE
并不意味着“根本没有上传文件”。如果$_FILES["attachments"]["error"][$n] == UPLOAD_ERR_NO_FILE
,则表示“没有为$n
上传文件 - 文件输入”。
Content-Type: multipart/form-data; boundary=---------------------------3764294497346
Content-Length: 4113
-----------------------------3764294497346
Content-Disposition: form-data; name="subject"
Ritz Camera Club Presentation
-----------------------------3764294497346
Content-Disposition: form-data; name="meeting_date"
May 2010
-----------------------------3764294497346
Content-Disposition: form-data; name="posted_by"
esthermstrom
-----------------------------3764294497346
Content-Disposition: form-data; name="body"
sdjflksjdflsjf
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename="Log.txt"
Content-Type: text/plain
contents of the file snipped
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream
-----------------------------3764294497346
Content-Disposition: form-data; name="submit"
Post Writeup
-----------------------------3764294497346--