我有一个上传多个文件的表单。上传的文件数量不会上传到唯一目录中。我现在面临的问题是,对于一个用户,我想运行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>
答案 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。