PHP實作 Ckeditor+Ckfinder檔案上傳 動態指定儲存位置

  • 20276
  • 0
  • PHP
  • 2013-09-26

PHP實作 Ckeditor+Ckfinder檔案上傳 動態指定儲存位置

1. 首先,可以先到http://ckeditor.com/下載最新版本的Ckeditor和Ckfinder。

2. 將下載好的檔案解壓縮後,放到自己的網站資料夾裡面。

    例如我的網站資料夾名稱為 test ,放置位置就是 D:\AppServ\www\test\ckeditor

                                                                                         D:\AppServ\www\test\ckfinder

3. 如何設置可以參考 ckeditor/_samples/index.html  或是 http://ckeditor.com/demo  ,

    也可以上網頁搜尋關鍵字 ckeditor,會有許多教學文件。

4. 接下來如何動態自訂要儲存的資料夾?

     今天建置的是共用Ckeditor,假設使用的人有數名,

     如果都將上傳圖片放置在同一個資料夾裡面,這樣就有可能被其他人竄改檔案或是被刪除。

     本文利用SESSION來判斷登入者是否可以使用和建立他們自己的資料夾,

     當然,在使用Ckeditor,開啟"影像屬性"的時候,也只會看見自己資料夾內的檔案。

     

     開啟ckfinder/config.php 檔案

     (1)找到  function CheckAuthentication()   這一段程式,將此function修改為

          //將可以使用Ckeditor上傳檔案的人,利用SESSION儲存起來後,在下面程式片段,來判斷哪些人可以使用。

          if(isset($_SESSION['MM_Username'])){

                return true;
          }else{
                return  false;
          }
     (2)設定儲存的位置,本文是使用絕對路徑,使用搜尋找到$baseUrl和$baseDir,設定如下
       
         $baseUrl = 'http://網站/uploads/images/';        //讀取路徑
         $baseDir = resolveUrl($baseUrl);                    //儲存實體路徑
 
     (3)
      $config['Thumbnails'] = Array(
                                                           'url' => $baseUrl . $_SESSION['MM_Username'].'/_thumbs',
                                                           'directory' => $baseDir . $_SESSION['MM_Username'].'/_thumbs',
                                                           'enabled' => true,
                                                           'directAccess' => false,
                                                           'maxWidth' => 100,
                                                           'maxHeight' => 100,
                                                           'bmpSupported' => false,
                                                           'quality' => 80);
     (4)上傳檔案最大尺寸,這邊也可以使用預設的,看需求。
       $config['Images'] = Array(
                                                    'maxWidth' => 610,
                                                    'maxHeight' => 1200,
                                                    'quality' => 80);

     (5)特別指定資料夾和檔案的權限,這邊也可以使用預定的,看需求。

         //if(isset($_SESSION['MM_Username'])){

             $config['AccessControl'][] = Array(
                                                                        'role' => '*',
                                                                        'resourceType' => '*',
                                                                        'folder' => '/',
 
                                                                        'folderView' => true,           //瀏覽資 料夾
                                                                        'folderCreate' => true,       //建立資 料夾
                                                                        'folderRename' => true,   //重新命名資料夾
                                                                        'folderDelete' => true,       //刪除資料夾
 
                                                                        'fileView' => true,
                                                                        'fileUpload' => true,
                                                                        'fileRename' => true,
                                                                        'fileDelete' => true);
        /*}else{
                $config['AccessControl'][] = Array(
                                                                           'role' => '*',
                                                                           'resourceType' => '*',
                                                                           'folder' => '/',
 
                                                                           'folderView' => false,
                                                                           'folderCreate' => false,
                                                                           'folderRename' => false,
                                                                           'folderDelete' => false,
 
                                                                           'fileView' => true,
                                                                           'fileUpload' => true,
                                                                           'fileRename' => true,
                                                                           'fileDelete' => true);
       }*/
 
      (6)
      $config['ResourceType'][] = Array(
                                                              'name' => 'Images',
                                                              'url' => $baseUrl .$_SESSION['MM_Username'],
                                                              'directory' => $baseDir .$_SESSION['MM_Username'],
                                                              'maxSize' => 0,
                                                              'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
                                                              'deniedExtensions' => '');
 
5. 前台的程式碼將登入的使用者利用SESSION記錄起來存放在$_SESSION['MM_Username']
    判斷是否已經有該名使用者的資料夾,如果沒有,就建立
    $file='uploads/images'.$_SESSION['MM_Username'];        //本網站是test,剛剛設定Ckfinder存讀檔案的路徑為'http://網站/uploads/images/'
    if(!is_dir($file)){
                              $mask = umask(0);                 //限定新增資料夾的權限
                              $cf = mkdir($file,0777);           //建立資料夾,並設定權限
                              umask($mask);                       //設回原本資料夾的權限
    }
 
6. 完成!
    只能看見自己上傳的圖片,如下圖
 
    
 
 
※附加說明:如果有權限存取的問題,請務必先修改uploads資料夾的權限讓此資料夾具有新增讀取修改刪除的權限,
                        並且將此權限也套用到此資料夾內的所有資料夾和檔案
 
※ 本文完整ckfinder/config.php設定,可下載來參考ckfinder.rar

 

 

參考或是複製語法時,別忘了留個言喔 ^ ^ ~