CKEditor+CKFinder+php上传文件配置方法
新版本的CKEditor只提供了基本的文本编辑功能,上传模块由另一个组件CKFinder。这里主要记录CKFinder上传的一些参数配置,能够成功上传文件,自定义上传文件目录,按日期+随机字符重命名文件。
1、下载CKFinder。
下载CKFinder,解压跟CKEditor放同一目录,下载地址:http://ckfinder.com/
2、开启上传功能。
打开ckfinder\config.php文件,找到函数CheckAuthentication(),大约在21行,将最后一行return false;改为return true;
3、自定义上传文件目录。
打开ckfinder\config.php文件,设置变量$baseUrl = '/upload/';,大约在63行。
4、设置按日期生成上传子目录。
如果您的网站上传文件比较多,文件都在一个目录下的话,对文件性能可能不是很思想,这时我们按/upload/yyyy/mm/格式生成目录。打开 ckfinder\config.php文件,找到$config['ResourceType'][],大约在189行,在 'url' => $baseUrl . 'files' 和 'directory' => $baseDir . 'files' 都加上 . '/' . date("Y") . '/' . date("m"),其它 Images,Flash项也是如此。这里的 url 表示上传后返回到输入框的地址,directory表示上传文件的目录。
5、按日期+随机字符重命名上传文件。
这样可以支持中文名字的文件上传。打开ckfinder\core\connector\php\php5\CommandHandler\FileUpload.php文件,在文件最后加个生成文件名函数
代码如下 | 复制代码 |
function mySetFileName() { for ($x = 0; $x < 5; $x++) { return date("ymdHis") . substr($gettime[0], 2, 6) . $rand; |
查找下面代码,大约在63行,
代码如下 | 复制代码 |
if ($sFileName != $sUnsafeFileName) { $iErrorNumber = CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID_NAME_RENAMED; } |
在下方添加下面代码,
代码如下 | 复制代码 |
$sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sFileName); $sFileName = mySetFileName() . '.' . $sExtension; |
经过一时间的 php + mssql,感觉 mssql 对编码的支持不是很好(其实还是自己没有把握好啦),但是又还没有来得急换数据库,只能将就点,今天又在提交数据时出现了错误。
由于提交的 ntext 字段的内容比较多,大约有 220 KB,所以造成了我的误解,以为是文章太长而引起的错误。我一看 php 配置,发现 php 对 mssql.textsize 的支持已经在 400 K了,怎么还出错?开启错误后才发现,原来不是文章太长,而是编码引起的错误。错误如下:
代码如下 | 复制代码 |
Notice: iconv() [function.iconv]: Detected an illegal character in input string in...。 |
英文实在太烂,只是知道 iconv() 函数出问题。google 翻译,说是输入字符串中检测到非法字符。恍然大悟。
根据错误提示到网上找到问题的解决办法,就是在 iconv() 的第二个参数加个 //IGNORE ,就是忽略错误的意思。代码如下:
代码如下 | 复制代码 |
iconv("utf-8", "gbk//IGNORE", $str); |
测试,提交成功。
注:网友经验,gbk 的范围比 gb2313 大,所以用 gbk 编码的出错率比 gb2313 小。
mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。 不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。
mb_convert_encoding的用法见官方:
mb_convert_encoding — Convert character encoding
Report a bug 说明
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
Converts the character encoding of string str to to_encoding from optionally from_encoding.
Report a bug 参数
str
The string being encoded.
to_encoding
The type of encoding that str is being converted to.
from_encoding
Is specified by character code names before conversion. It is either an array, or a comma separated enumerated list. If from_encoding is not specified, the internal encoding will be used.
See supported encodings.
Report a bug 返回值
The encoded string.
Report a bug 范例
Example #1 mb_convert_encoding() example
代码如下 | 复制代码 |
<?php /* Convert EUC-JP to UTF-7 */ /* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */ /* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */ |
mb_convert_encoding( $str, $encoding1,$encoding2 )
$str,要转换编码的字符串
$encoding1,目标编码,如utf-8,gbk,大小写均可
$encoding2,原编码,如utf-8,gbk,大小写均可
实例1
代码如下 | 复制代码 |
<?php $str='脚本之家:http://www.111cn.net'; echo mb_convert_encoding($str, "UTF-8"); //编码转换为utf-8 ?> |
代码如下 | 复制代码 |
<?php $str='脚本之家:http://www.111cn.net'; echo mb_convert_encoding($str, "UTF-8", "GBK"); //已知原编码为GBK,转换为utf-8 ?> |
代码如下 | 复制代码 |
<?php $str='脚本之家:http://www.111cn.net'; echo mb_convert_encoding($str, "UTF-8", "auto"); //未知原编码,通过auto自动检测后,转换编码为utf-8 ?> |
做一个GBK To UTF-8
代码如下 | 复制代码 |
< ?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("???S我的友仔", "UTF-8", "GBK"); ?> |
再来个GB2312 To Big5
代码如下 | 复制代码 |
< ?php header("content-Type: text/html; charset=big5"); echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); ?> |
不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。
PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。
下面还有一些详细的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)
用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;
string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.
使用:
发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.
from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
代码如下 | 复制代码 |
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */ $str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”); /* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */ $str = mb_convert_encoding($str, “EUC-JP”, “auto”); |
例子:
代码如下 | 复制代码 |
$content = iconv(”GBK”, “UTF-8//IGNORE″, $content); $content = mb_convert_encoding($content, “UTF-8″, “GBK”); |
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数
文章介绍了ob_gzhandler\' conflicts with \'zlib output compression解决方法1. output handler ‘ob_gzhandler’ conflicts with ‘zlib output compression’
PHP Warning: ob_start() [ref.outcontrol]: output handler ‘ob_gzhandler’ conflicts with ‘zlib output compression’ in yourfiles
Try replacing
代码如下 | 复制代码 |
if (extension_loaded('zlib')) { $do_gzip_compress = TRUE; ob_start(); ob_implicit_flush(0); //header('Content-Encoding: gzip'); } |
(i.e. the code that enables zlib compression) with
代码如下 | 复制代码 |
if (extension_loaded('zlib')) { ob_end_clean(); ob_start('ob_gzhandler'); } |
这是因为PHP中Zlib模块设置错误造成的,将zlib.output_compression这一行注释掉就可以了。这里需要指出的是PHP5自带GZIP模块的,不需要另外加载。
PHP的全局变量和C语言有一点点不同。在C语言中,全局变量在函数中主动生效,除非被局部变量笼罩。这可能引起一些问题,有些人可能漫不经心的转变一个全局变量。PHP中全局变量在函数中应用时必须用global申明为全局。一、举例比较
例一:
代码如下 | 复制代码 |
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?> |
因为$var1被删除了,所以什么东西都没有打印。
例二:
代码如下 | 复制代码 |
<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; ?> |
意外的打印了1。证明删除的只是别名引用,其本身的值没有受到任何的改变。
二、解释
global $var其实就是&$GLOBALS['var'],调用外部变量的一个别名而已。
上面代码中的$var1和$GLOBALS['var1']是指的同一变量,而不是两个不同的变量。
PHP的全局变量和C语言有一点点不同。在C语言中,全局变量在函数中主动生效,除非被局部变量笼罩。这可能引起一些问题,有些人可能漫不经心的转变一个全局变量。PHP中全局变量在函数中应用时必须用global申明为全局。
PHP的Global变量的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
三、结论
1.$GLOBALS['var']是外部的全局变量本身
2.global $var是外部$var的同名引用或者指针。
相关文章
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 这篇文章主要介绍了Vue使用formData格式类型上传文件的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
- 下面小编就为大家分享一篇c# FTP上传文件的实例代码,超简单哦~希望对大家有所帮助。一起跟随小编过来看看吧,...2020-06-25
PHP在Linux下连接MSSQLServer的配置方法简述(一、Sybase库)
如果需要在Linux下访问Microsoft SQL Server或Sybase数据库,则推荐下列软件包。 SybaseCommon http://download.sybase.com/pub/ase1192_linux/sybase-common-11.9....2016-11-25- 修改httpd.conf 找到 <Dirctory "/var/www/html"> 在这个Dirctory容器内添加: 代码如下 复制代码 SetEnvIfNoCase Referer "^http://www.111cn.net/"...2016-01-28
- 首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。然后,得对相应代码做一定调整。1. 覆盖phpmailer请从附件进行下载: 复制代码 代码如下:http://cywl.jb51.net:81/201405/yuanma/ecmall_phpmailer_lib(jb51.n...2014-05-31
- 今天在使用西部数码空间时发现里面有很多定义好的伪静态规则了,下面我来给大家介绍一下在后面主机面板中配置使用伪静态功能吧,希望文章对各位会带来帮助。...2016-10-10
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- 由于在php开发时很多函数命令都只记得一个部份,如果要全写还得百度,后来听说有一个PHPStorm可实现自动补全,我就下载了一个并安装配置了,下面给各位朋友介绍。 为...2016-11-25
- 这篇文章主要介绍了yii实现使用CUploadedFile上传文件的方法,结合具体的前端与后端处理代码实例分析了CUploadedFile类的使用方法,需要的朋友可以参考下...2015-12-31
阿里云OSS 通过表单直接上传文件 Post Policy例子
本文章为各位简单介绍阿里云OSS 通过表单直接上传文件 Post Policy例子,这个例子非常的简单只需要简单的像php一样就可以了,具体如下。 代码如下 复制代...2016-11-25mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。 查看目前配置:复制代码 代码如下:show VARIABLES like '%max_allowed_packet%';显示...2014-05-31- 打开httpd.conf文件用文本编辑器打开后,查找 代码如下 复制代码 Options FollowSymLinks AllowOverride None 改为: Options FollowSymLinks AllowOv...2016-01-28
- 这篇文章主要介绍了PHP响应post请求上传文件的方法,涉及php针对post传输数据处理的相关技巧,需要的朋友可以参考下...2015-12-21
- SQLite数据库安装好之后我们只要在php.ini中把 ;extension=php_pdo_sqlite.dll 前面的;取消掉就可以了,下面我来给大家简单的介绍一下吧。 SQLite数据库的配置 ...2016-11-25
- 1、首先确定Apache是否加载了Mod_rewrite 模块 方法: 检查 httpd.conf 中是否存在以下两段代码 (具体路径可能会有所不同,但形式基本是一样的): (一)LoadModule rewrite_modu...2016-01-28
asp.net fileupload控件上传文件与多文件上传
这篇文章主要介绍了asp.net fileupload控件上传文件的方法,fileupload控件多文件上传,以及fileupload上传时实现文件验证的方法,需要的朋友可以参考下...2021-09-22- 本篇文章主要介绍了解决ASP.NET Core Mvc文件上传限制问题,具有一定的参考价值,有需要的可以了解一下。...2021-09-22
- 可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱...2016-11-25