1. 程式人生 > >CKEditor圖片上傳的PHP實現

CKEditor圖片上傳的PHP實現

編輯文章是網站後臺的常用功能,CKEditor是目前流行的富文字編輯器,它使用方便但要做一些配置才能實現上傳本地圖片到伺服器的功能。在參考了一篇java下CKEditor圖片上傳的博文後,我用PHP實現了CKEditor編輯文章並支援上傳本地圖片的功能。

從官網http://ckeditor.com/下載CKEditor,根據需要可以選擇基本,標準,完整或自定義版,我下載的是CKEditor4.6完整版。

整合CKEditor到自己的頁面,程式碼如下

<html>
<head>
	<title>CKEditor整合</title>
	<script type="text/javascript" src="../lib/ckeditor/ckeditor.js"></script> <!-- 引入ckeditor -->
</head>
<body>
	<textarea id="editor">
	</textarea>
	
	<script>
	//初始化ck編輯器,將它應用到id為editor的元素上
	CKEDITOR.replace('editor', { 
		height: 350 //編輯器配置,這裡僅設定高度為350
	});
	</script>
</body>
</html>
瀏覽器開啟頁面之後就會看到ck編輯器了,編輯器中有插入圖片的功能,預設只能輸入圖片URL不能本地上傳圖片,要開啟上傳功能就需要服務端配合了。

在ck編輯器中配置filebrowserUploadUrl,配置好了之後插入圖片視窗將多出一個上傳標籤,使用者可以在這裡選擇本地圖片,點上傳後圖片將被髮送到我們配置的地址上。

<html>
<head>
	<title>CKEditor整合</title>
	<script type="text/javascript" src="../lib/ckeditor/ckeditor.js"></script> <!-- 引入ckeditor -->
</head>
<body>
	<textarea id="editor">
	</textarea>
	
	<script>
	//將id為editor的元素替換為ck編輯器
	CKEDITOR.replace('editor', { 
		height: 350, 
		filebrowserUploadUrl: "/index.php?act=Cms.uploadCkImg", //設定圖片上傳請求地址
	});
	</script>
</body>
</html>
接著在服務端實現圖片上傳功能。ck編輯器將圖片以'upload'的名字上傳,同時還會帶上一個CKEditorFuncNum的引數,這個引數用來回調通知編輯器圖片上傳的結果。

處理步驟是PHP先獲取$_FIile['upload']和$_GET['CKEditorFuncNum'],然後將上傳的圖片放置到服務上,根據上傳結果返回一個呼叫ck的js

<script>window.parent.CKEDITOR.tools.callFunction($cb, '$url', '$error');</script> 

其中$cb是之前獲取的CKEditorFuncNum,$url是上傳成功後訪問圖片的url,$erro是上傳失敗時ck需要顯示給使用者的錯誤資訊

$cb = $_GET['CKEditorFuncNum']; //獲得ck的回撥id
try {
	if(isset($_FILES['upload'])) { //上傳的圖片的資訊存在$_FILES['upload']
		$s = new FileService();
		$url = $s->uploadImg($_FILES[$name], $folder); //我自己的放置上傳圖片的邏輯,返回圖片放置後的url
		echo "<script>window.parent.CKEDITOR.tools.callFunction($cb, '$url', '');</script>" //圖片上傳成功,通知ck圖片的url
	}	
}catch (\Exception $e) {
	$erro = $e->getMessage();
	echo "<script>window.parent.CKEDITOR.tools.callFunction($cb, '', '$error');</script>" //圖片上傳失敗,通知ck失敗訊息
}
至此就可以用CKEditor自如地編輯圖文了。

另外預設上傳圖片預覽中有大堆文字可能看著不爽,可以開啟ckeditor/plugins/image/dialogs/image.js檔案,搜尋“b.config.image_previewText”就能找到這段鳥語了,(b.config.image_previewText||'')單引號中的內容全刪了,注意別刪多了。