在控制器方法中调用mkdir()一次

时间:2014-03-31 06:57:14

标签: php codeigniter

我有一个上传多个文件的表单。上传的文件数量不会上传到唯一目录中。我现在面临的问题是,对于一个用户,我想运行mkdir()一次。不知道该怎么做。

Controller.php这样

class Upload_file extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }
    function upload_it()
    {
        $this->load->helper('form');
        $uniqueID = uniqid(); 
        mkdir("application/uploads/".$uniqueID);

        $config['upload_path'] = 'application/uploads/'.$uniqueID;
        $config['allowed_types'] = '*';
        $this->load->library('upload', $config);
        $this->upload->initialize($config);
        $this->upload->set_allowed_types('*');

        $data['upload_data'] = '';
        if (!$this->upload->do_multi_upload('files')) {
            $data = array('msg' => $this->upload->display_errors());

        } 
        else
        {
              $data['upload_data'] = $this->upload->get_multi_upload_data();
        }
        $this->load->vars($data);

        $this->load->view('upload');
    }
}

HTML

<form target="upload_target" id="fileupload" method="post" action="<?php echo site_url('upload_file/upload_it'); ?>" enctype="multipart/form-data">

<div class="fileUpload btn btn-warning">
    <span>Browse</span>
    <input id="uploadBtn" type="file" multiple="multiple" name="files[]" class="upload" />
</div>
    <input id="uploadFile" style="width: 160px; margin-top: 30px;float: left;height: 35px;" placeholder="Choose File" disabled="disabled" />
    <button id="btnupload" style="padding: 4.5px; float:left;margin-top: 30px;border-radius: 0px;" disabled="disabled" type="submit" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-upload"></span></button>

</form> 

3 个答案:

答案 0 :(得分:3)

我不知道我是否理解你的问题,但我想你应该先检查文件夹是否存在,然后创建它:

if (!file_exists("application/uploads/".$uniqueID)) {
    mkdir("application/uploads/".$uniqueID);
}

答案 1 :(得分:0)

您可以确定首先是否已退出文件夹,直到检查新文件夹名称

实施例: - 在用户表中创建一个具有名称文件夹名称的新字段,如果文件夹列为空,则首次创建一个新字段,如下所示:

$folder_path = "application/uploads/".$uniqueID;
while (file_exists($folder_pat)) {
    $uniqueID = $this->uniqid();   // get the next unique id
    $folder_path = "application/uploads/".$uniqueID;
}

mkdir($folder_path);

一旦创建了文件夹,那么当你想要再次上传任何文件时,那么首先要检查数据库中的任何文件。已经存在与否,如果没有退出则创建一个新的目录。否则使用已经创建的前一个。

答案 2 :(得分:0)

我建议你使用这个小脚本创建一个dir(递归或不递归)或使用现有的:

private function _r_mkdir($path, $mode = 0755, $recursive = true)
{
    if(empty($path)){
        return false;
    }

    if($recursive) {
        $toDo = substr($path, 0, strrpos($path, '/'));
        if($toDo !== '.' && $toDo !== '..'){
            $this->_r_mkdir($toDo, $mode);
        }
    }

    if(!is_dir($path)){
        mkdir($path, $mode);
    }

    return true;
}

在你的功能中,你可以这样称呼它:

$relativePath = './uploads/'.$path;
$this->_r_mkdir($relativePath);

注意 我不建议您在/ Application /文件夹中创建文件夹/ uploads /。为什么?因为资产不是应用程序代码流的一部分。它是独立的。假设您想要将代码压缩以便在其他服务器(或某人)上发送,您可能不希望其中包含所有已上传文件的Gigas。