使用PHP上传多个文件

时间:2010-01-14 23:49:23

标签: php arrays file-upload

这是我的HTML标记:

<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>

当我提交表单时,表单正在提交空文件。这是它发送的数组的print_r

Array
(
    [name] => Array
        (
            [0] => thumb.jpg
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [type] => Array
        (
            [0] => image/jpeg
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [tmp_name] => Array
        (
            [0] => C:\xampp\tmp\phpEE16.tmp
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [error] => Array
        (
            [0] => 0
            [1] => 4
            [2] => 4
            [3] => 4
            [4] => 4
        )

    [size] => Array
        (
            [0] => 5130
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

)

有没有办法阻止发送所有这些空白文件?因为我有一种感觉,它会让我在剧本后面感到头痛。我以为我可以查看每个文件的错误代码(如果没有文件,则为4)然后从数组中取消设置,你怎么看?

4 个答案:

答案 0 :(得分:1)

吻它。只需检查错误代码即可完成 没有一个简单的方法,因为用户(他们是愚蠢的,你知道)将尝试上传,有时只在最后一个位置,或者可能在第一和第三位置...你得到我的漂移。
B.T.W有许多现成的课程,可以为你处理。

答案 1 :(得分:0)

一种方法是只有一个文件上传输入和一个调用JavaScript函数的+按钮,该函数会添加另一个(和另一个......)文件上传输入。

我不明白为什么额外的数组值会给你带来问题,只需使用如下的通用上传函数,你应该没问题:

function Upload($source, $destination)
{
    $result = array();

    if (array_key_exists($source, $_FILES) === true)
    {
        $destination = str_replace('\\', '/', realpath($destination));

        if (is_array($_FILES[$source]['error']) === true)
        {
            foreach ($_FILES[$source]['error'] as $key => $value)
            {
                if ($value == UPLOAD_ERR_OK)
                {
                    if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . basename($_FILES[$source]['name'][$key])) === true)
                    {
                        $result[] = $destination . basename($_FILES[$source]['name'][$key]);
                    }
                }
            }
        }

        else
        {
            if (move_uploaded_file($_FILES[$source]['tmp_name'], $destination . basename($_FILES[$source]['name'])) === true)
            {
                $result[] = $destination . basename($_FILES[$source]['name']);
            }
        }
    }

    return $result;
}

答案 2 :(得分:0)

也许您可以在提交表单之前检查字段值(input.value != ""),如果为空则从DOM中删除它们。

或者,在服务器端,检查针对UPLOAD_ERR_NO_FILE常量的错误代码。

答案 3 :(得分:0)

您可以从硬编码到html中的一个文件输入开始,然后允许用户单击调用javascript函数的按钮,为他们想要上传的每个附加文件添加额外的输入。这样就不应该有任何不必要的文件输入。类似地,您可以在提交表单时使用javascript测试空输入并将其删除。