PHP - $ _FILES数组为空

时间:2014-02-21 16:41:39

标签: php html file-upload

是,已设置enctype属性。其他表单/表单hanlders工作正常,因此临时目录必须是可写的。我没有想法。

我检查了帖子值并且$_POST['file']存在并包含文件名。

这是我的表单和处理它的PHP。我错过了什么?

<form action='orl_ftp.php' method='post' enctype='multipart/form-data'>
    <table>
        <tr>
            <td>Choose File: </td>
            <td><INPUT type='file' id='file' name='file'></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><INPUT type='submit' name='Submit' value='Process'></td>
        </tr>
    </table>
</form>

以及相关的PHP代码。请注意,$ _FILES数组已设置,它只是为空

if(isset($_POST['Submit'])){
    $upload_results = "";
    if(!isset($_FILES)){$upload_results .= "No files uploaded"; }
    if($upload_results == ""){

        echo "<pre>";
        var_dump($_FILES);
        exit;

        // ...

    }
}

2 个答案:

答案 0 :(得分:4)

您在同一个脚本中有多个表单,因此每个表单都需要enctype='multipart/form-data'

此外,它似乎不会关闭第一个表单,并且<form ... />无法使用有效的HTML。

答案 1 :(得分:2)

第101行:

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" />
                                                                 ^

这导致了问题,浏览器保持此窗体打开,因此缺少enctype是问题。正确删除或关闭此表单。

示例:

<?php
if(isset($_POST['Submit'])){
    $upload_results = "";
    if(!isset($_FILES)){$upload_results .= "No files uploaded"; }
    if($upload_results == ""){
        echo "<pre>";
        var_dump($_FILES);
        exit;
    }
}
?>
<form action='' method="post" />
<form action='' method='post' enctype='multipart/form-data'>
    <table>
        <tr>
            <td>Choose File: </td>
            <td><INPUT type='file' id='file' name='file'></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><INPUT type='submit' name='Submit' value='Process'></td>
        </tr>
    </table>
</form>

这不会发布任何文件。