在给客户迁移PHP的网站的时候,发现网站的前端运行很正常,但是在后台的时候就出了问题,出现了标题不存在的错误,还有登录成功之后无法跳到管理的页面,后面经过一番折腾终于找到一些相关的文章,这里总结一下。其实主要的问题是 DedeCMS V5.7 遇上 PHP5.4 以上
会出现一下问题:
A.在后台的文章编辑的时候,在提交保存的时候提示 “标题不能为空”,或者是保存成功之后,发现标题被清空了。
原因:这里主要是编码的问题,DedeCMS V5.7 在 PHP5.4的版本才会出现这个问题,主要是DedeCMS V5.7 在PHP5.4的编码问题。这里要修改文章代码里面方法。PHP版本升级为PHP5.4之后,htmlspecialchars在php5.4默认为utf8编码,gbk编码字符串经 htmlspecialchars 转义后的中文字符串为空,也就是标题为空。
解决:给htmlspecialchars添加ENT_COMPAT ,'GB2312'参数修改编码默认值
1、修改dede/article_add.php 和 dede/article_edit.php ,
将 $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
替换成 $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,'GB2312');
2、include/ckeditor/ckeditor_php5.php 138行 ,将htmlspecialchars($value)替换为htmlspecialchars($value, ENT_COMPAT ,'GB2312')
其实这里我最终没有用这个方法,因为我是帮客户迁移网站的,网站的数量比较多,如果我去这么改工作量很大的,我最终直接用回PHP5.2 的版本。这里只要的IIS里面设置一下php-cgi.exe的路径就可以,简单很多,没必要做程序的改动。
B.登录成功之后无法跳到管理的页面
我在login的页面进行跟踪,发现是用户名和密码是验证成功,到了注册到session的时候就出现了错误,这里的原因的表面上都是由于版本的不对应导致,其实这里是因为方法不兼容,PHP 5.4的不支持session_register()。
在userlogin.class.php,查找到 keepuser的方法,把里面的session_register()的那一行注释掉即可,有6行,记得都要注释掉。其实如果这里直接使用低版本的PHP的话可以可以解决问题的。