php $ _FILES错误代码返回意外错误

时间:2010-05-31 00:43:05

标签: php

我有一些代码允许用户一次上传多个文件。在上传之后它永远不会到达特定点,所以我输入一个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表示没有上传文件。

有什么想法吗?这些文件非常明显地得到了应有的位置。是否有其他“上传”的定义没有发生?

1 个答案:

答案 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--