【问题标题】:Codeigniter, uploading multiple files with same nameCodeigniter,上传多个同名文件
【发布时间】:2013-05-16 10:47:57
【问题描述】:

我有一个上传表单,可以根据需要添加任意数量的文件。但是,当我开始尝试上传文件时,出现错误。

控制器

$this->load->library('upload'); 
$error = "";
$file  = "";
$this->total_count_of_files = count($_FILES['user_certificates']['name']);
print_r($_FILES['user_certificates']['name']);

for($i=0; $i<$this->total_count_of_files; $i++)
{
    $_FILES['user_certificates']['name'] = $_FILES['user_certificates']['name'][$i];
    $_FILES['user_certificates']['type'] = $_FILES['user_certificates']['type'][$i];
    $_FILES['user_certificates']['tmp_name'] = $_FILES['user_certificates']['tmp_name'][$i];
    $_FILES['user_certificates']['error'] = $_FILES['user_certificates']['error'][$i];
    $_FILES['user_certificates']['size'] = $_FILES['user_certificates']['size'][$i];

    $config['encrypt_name'] = TRUE;
    $config['file_name'] = $_FILES['user_certificates']['name'];
    $config['upload_path'] = './certificate_files/';
    $config['allowed_types'] = 'txt|pdf|doc|docx';
    $config['max_size'] = 0;

    $this->upload->initialize($config);

    if (!$this->upload->do_upload())
    {
        $status = 'error';
        $msg = $this->upload->display_errors();
    }
    else
    {
        $data = $this->upload->data();
        $file = $data['raw_name'] . $data['file_ext'];
    }
    if($file)
    {
        $status = "success";
        $msg = "Image successfully uploaded";
    }
    else
    {
        $status = "error";
        $msg = "Something went wrong when saving the image, please try again.";
    }
}   
echo json_encode(array('status' => $status, 'msg' => $msg));
exit();

print_r($_FILES['user_certificates']['name'])) 显示了我添加的文件:

Array ( [0] => license.txt [1] => license.txt )

我完全不知道如何让上传工作。有什么想法吗?

提前干杯!

编辑

如果我改变这个:

if (!$this->upload->do_upload())

到这里:

if (!$this->upload->do_upload('user_certificates'))

它有效,但仅适用于一个文件,由于某种原因它似乎没有再次循环

【问题讨论】:

  • 你得到了什么错误???
  • 文件没有上传到任何文件夹,并且 'echo json_encode(array('status' => $status, 'msg' => $msg));'显示 '{"status":"error","msg":"保存文件时出错,请重试。"}'。因此错误源于配置初始化后。有什么想法吗?
  • 您的文件似乎正在上传,但您从哪里设置$data['raw_name']的值???

标签: php file codeigniter upload


【解决方案1】:

您的循环似乎不正确。

...
$_FILES['user_certificates']['name'] = $_FILES['user_certificates']['name'][$i];
...

这些行覆盖了原来的 $_FILES 数组,所以在完成第一个循环后,它不会在循环中找到任何其他内容,因为它被覆盖了。

相反,您可以先将 $_FILES 数组存储到局部变量中,然后循环遍历它以逐个上传。

【讨论】:

  • 知道如何解决这个问题吗?
  • 正如我所建议的,您可以在开始循环之前将 $_FILES 存储在临时变量中,例如 $temp = $_FILES,然后循环通过 $temp,然后在循环内使用初始化 $_FILES 变量临时变量。试试看。如果它不起作用,请告诉我。
  • 啊,太好了,成功了!非常感谢,这么一点点改变就大不一样了!
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2020-03-31
  • 2012-01-12
  • 2013-12-05
  • 2015-01-07
相关资源
最近更新 更多