2014-03-31 53 views
3

我有一個可以上載多個文件的表單。上傳一次的文件上傳到一個唯一的目錄中。我現在面臨的問題是,對於一個用戶,我想運行一次mkdir()。不知道如何去做。在控制器的方法中調用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> 
+5

它的一個很好的做法是在創建之前檢查文件夾是否已經存在。 –

+0

不明白你的問題。它看起來確定你寫在那裏?! – Xatenev

回答

3

我不知道如果我理解你的問題,但我想你應該檢查,如果該文件夾先存在,那麼創建它:

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

每次運行'$ uniqueID = uniqid();'時都會創建新值。我想檢查一下它是否在下一次創建時不應該被調用。 – BinteHava

+0

您可以檢查過去是否已創建$ uniqueId的唯一方法是詢問文件夾是否存在。這可能不是一個很好的方式去做你的意思。也許你應該使用一個自動遞增的Mysql列,然後將它用作uniqueId。 – Fadey

+0

好的但是這個功能在註冊時被人們多次調用1次,那麼如何檢查列ID是否增加? – BinteHava

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); 

,那麼當你想要再次上傳任何文件時,那麼首先在db中檢查它是否已經存在或不存在,如果沒有退出,則創建一個新的目錄。否則使用之前創建的那個。

+0

它給出一個錯誤未定義的變量名稱$ uniqueID。 – BinteHava

+0

然後你打電話給ref,例如$這 - > UNIQUEID(); – Suleman

+0

我實際上想爲一個用戶創建目錄一次,或者他一次上傳1個文件,或者10次上傳10個文件。我希望他們在一個文件夾中。 – BinteHava

0

我建議你使用這個腳本來創建一個目錄(遞歸與否),或使用現有之一:

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上傳的文件。

相關問題