在php中处理文件上传的大量错误

时间:2016-08-05 04:38:17

标签: php file-upload

我正在使用此代码处理上传的文件:

mkdir("files/" . $id, 0700);
$path = "files/" . $id;
$count = 0;

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
    {
        foreach($_FILES['attachments']['name'] as $f => $name)
        {
            if($_FILES['attachments']['error'][$f] == 4)
            {
                continue;
            }
            if($_FILES['attachments']['error'][$f] == 0)
            {
                if(move_uploaded_file($_FILES["attachments"]["tmp_name"][$f], $path.$name))
                {
                    $count++;
                }
            }
        }
    }

$id是从数据库中取出的随机数。此外,我正在使用这个标记:

<input type="file" id="attachments" name="attachments[]" multiple="multiple" accept="*">

虽然之前完全相同的代码运行得非常出色,但它现在抛出了一些我无法推断的错误:

  

1:mkdir():文件存在于......在线...(&lt; - 现在,它不是理所当然的!)
  2:未定义的索引:...在线上的附件...(好吧,它也使用表格方法发布!)   3:为......中的foreach()提供的参数无效...(由于上述错误确实阻止了foreach正确地完成其工作,因此非常清楚)

是的,我确保我实际使用POST。我也尝试将文件输入的名称从attachments更改为任何其他名称,但情况保持不变。

添加enctype="multipart/form-data"已经完成了。

2 个答案:

答案 0 :(得分:0)

1]检查文件夹权限0777.您能够创建目录的天气

2]发表表格后。确保您的表单具有enctype = multipart / form-data标记。 在你的文件中,请检查

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

如果您收到任何数据?如果获取数据然后继续前进。

答案 1 :(得分:0)

首先检查您的$ id是否确实包含某些内容,其次,您的表单应具有enctype = multipart/form-data属性,以便使用输入类型文件。

<form action="test.php" method="post" enctype="multipart/form-data">

现在,在您执行任何工作之前,您将获得一系列文件,请参阅附件的print_r:

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