CKEditor+CKFinder+php使用心得

111 篇文章 0 订阅
最近由于工作需要,一次性需要把所有的编辑器改进成CKEditor,不过这玩意没有上传功能,只好找到它的姐妹产品CKFinder。网上一查,才知道这两东西合伙才有希望完成上传等诸多功能。

由于之前都用FCKeditor,突然使用CKEditor蛮不适应,不过FCK由于有漏洞,也不敢用了,才知道原来FCK是CK的前身。 几经抓狂,花了半天时间终于搞定了。
总结了以下心得:
1、/ckeditor/config.js, 配置文件,如果不想写太多,可以直接写好默认配置(语言,菜单栏,宽度),有需要可以百度config配置。
config.language = 'en';
config.skin = 'v2';
config.uiColor = '#AADC6E';
config.toolbar = 'Basic';
....
2、官方的demo大多都喜欢用js配置editor区域,习惯写php的我就嫌麻烦,只好看内置的php类。
require_once ROOTPATH . "ckeditor/ckeditor.php";
$CKEditor = new CKEditor();
$CKEditor->returnOutput = true; //设置输出可用变量的情况
$CKEditor->basePath = '/ckeditor/';//设置路径
$contentarea = $CKEditor->editor("content", $rs['contents']); //生成一个以name为content的textarea
 
echo $contentarea;
3、需要上传了 ,只好加入ckfinder。把ckfinder和ckeditor放在同级目录下。
打开/ckfinder/config.php, 首先设置第一个函数CheckAuthentication(),这个函数需要按照自己的规则写,只要return true的情况才能允许上传文件到服务器的,当然不建议直接写return true,这将导致安全问题。可以采用session来处理比较方便。
session_start();
function CheckAuthentication(){
    if(isset($_SESSION['UseEidtor']))
        return true;
    else
        return false;
}
4、上传文件位置:也在/ckfinder/config.php, 找到$baseUrl,之前一直想自己写一个方法用来定位路径,实在不好办,后来只好用sesssion,如果一个网站中,有需要上传到不同的位置,正好可以利用session定位。
if (isset($_SESSION['UseEidtor'])) {
    
    switch ($_SESSION['UseEidtor']) {
        case 'Addr1':
            $baseUrl = '/addr1/uploadfile/';
        case 'Addr2':
            $baseUrl = '/addr2/upfiles/';
    }
    
} else {
    
    $baseUrl = '/upfiles/';
    
}
5、对于上传文件名,ckfinder会按照原有的名字命名,中文的情况下可能会乱码,所以建议使用日期重命名。打开/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php 找到
$sUnsafeFileName =CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename($uploadedFile['name']));
后面加上
$sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sUnsafeFileName);
$sUnsafeFileName=date('YmdHis').'.'.$sExtension;
或者
打开ckfinder\core\connector\php\php5\CommandHandler\FileUpload.php文件,在文件最后加个生成文件名函数
function mySetFileName() {
    $gettime = explode(' ', microtime());
    $string = 'abcdefghijklmnopgrstuvwxyz0123456789';
    $rand = '';

    for ($x = 0; $x < 5; $x++) {
        $rand .= substr($string, mt_rand(0, strlen($string) - 1), 1);
    }

    return date("ymdHis") . substr($gettime[0], 2, 6) . $rand;
}

$sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sUnsafeFileName);
$sUnsafeFileName = mySetFileName() . '.' . $sExtension;
6、设置按日期生成上传子目录
如果您的网站上传文件比较多,文件都在一个目录下的话,对文件性能可能不是很思想,这时我们按/upload/yyyy/mm/格式生成目录。打开ckfinder\config.php文件,找到$config['ResourceType'][],大约在189行,在 'url' => $baseUrl . 'files' 和 'directory' => $baseDir . 'files' 都加上  . '/' . date("Y") . '/' . date("m"),其它 Images,Flash项也是如此。这里的 url 表示上传后返回到输入框的地址,directory表示上传文件的目录。


7、 最后就是使用ckfinder
    require_once ROOTPATH . "ckeditor/ckeditor.php";
    require_once ROOTPATH . 'ckfinder/ckfinder.php' ;
    
    $CKEditor = new CKEditor();
    $CKEditor->returnOutput = true;
    $CKEditor->basePath = '/ckeditor/';
 
    CKFinder::SetupCKEditor($CKEditor, '/ckfinder/') ;//注意这里是相对路径,相对于根目录,不能用绝对路径
 
    $contentarea = $CKEditor->editor("content", $rs['contents']);
    echo $contentarea;

另一种js或html页面的修改
<script type="text/javascript">
CKEDITOR.replace( 'editor1',
{
filebrowserBrowseUrl : 'ckeditor/ckfinder/ckfinder.html',
filebrowserImageBrowseUrl : 'ckeditor/ckfinder/ckfinder.html?Type=Images',
filebrowserFlashBrowseUrl : 'ckeditor/ckfinder/ckfinder.html?Type=Flash',
filebrowserUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
filebrowserImageUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
filebrowserFlashUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
});
</script> 

两者配合用起来还是挺不错的,更重要的原因是安全性高了很多。


补充:

若整合后会出现“ 因为安全原因,文件不可浏览. 请联系系统管理员并检查CKFinder配置文件”错误


有两个原因:
1:上传目录没有写入权限
2:因为出于安全考虑ckfinder/config.php文件中的CheckAuthentication()函数默认返回值是false, 需要手动修改验证条件, 不建议直接返回true


由于ckfinder不是免费的,所以默认情况下会在上传页面中有红色的广告提示,虽然不影响使用,但总是觉得不爽。
破解方法:
1.x版的破解方法:打开core/js下的两个ckfinder_ie.js和ckfinder_gecko.js文件.查找字符串"en.call(window,qo);"将其注释即可;
2.0版的把广告语写在了ckfinder.js中,类似
x50\154\145\x61\x73\145\040\x76\151\x73\151\164\040\164\150\x65\x20\x3c\141\x20\150\x72\145\x66\075\047\x68\x74\x74\x70\x3a\057\x2f\x63\153\x66\151\156\144\x65\162\x2e\x63\157\155\x27\x20\164\141\162\147\x65\164\x3d\x27\137\142\154\x61\156\x6b\047\076\x43\113\x46\x69\x6e\144\x65\x72\x20\x77\145\x62\040\163\x69\164\x65\x3c\057\x61\x3e\x20\164\x6f\x20\157\x62\164\x61\151\x6e\040\x61\x20\166\141\x6c\x69\144\040\x6c\x69\x63\145\x6e\163\x65\x2e

这样恶心的代码,暂时没有找到破解方法。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值