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資料夾的權限讓此資料夾具有新增、讀取、修改、刪除的權限,
並且將此權限也套用到此資料夾內的所有資料夾和檔案。
參考或是複製語法時,別忘了留個言喔 ^ ^ ~