PHP验证码(dedecms)的问题。求大神帮看看
接触帝国CMS和织梦dedecms有一段时间了。我们公司做站,无论是竞价站,推广站还是优化站,基本用的都是dedecms,因为不需要会员系统,所以也基本没多少安全性问题,但是很少用帝国cms。而我自己做站,因为考虑到安全问题,所以就选择了帝国。最初,我也是不太了解两者的区别,当时抉择了很久,不过幸运的是,我的选择没错。相信也有很多新手朋友在徘徊吧,今天爱建站公益网就把个人经验和大家分享下,以免新手朋友多走弯路。
入手:从入手方面来说,的确,织梦更占优势,简单易用,功能齐全的确是大家都看得到感觉的到的,我就不多说了。帝国相对来说入手难些,有灵动标签和万能标签以及其他标签之分,也分各种模板、模板变量等等,比织梦复杂的多,而且模板是写在数据库里,所以入手帝国的模板,估计很多新手朋友感觉不太适应。
做站的效率:对于新手来说,织梦套模板似乎更简单,而帝国可能需要熟悉万能和灵动标签用法,里面很多数字排列,相对难记,小编到现在还有些标签没完全记住,只是知道这个用法,有时还会需要去参考下才敢写,这样也就使得帝国做模板效率低了些,可能有的朋友做套简单的织梦模板一会就搞好了,但是帝国却要做几倍的时间。但这只是对于刚接触帝国的新手朋友而已,如果熟悉了帝国系统,你会发现做模板的效率不比织梦差多少。我现在接单很多客户都是要求用帝国做,一个简单仿站的单,单独去做真的最多几个小时就好了。我记得有次帮一个朋友做手机站(他提供html模板,我套标签),整站下来,大概7个页面吧,还有一个单独做的搜索页面,一共只用了2个小时左右。可以看得出来,熟悉以后还是很不错的。
交接:这个主要针对特殊人群,比如像我们公司,四个点的站可能我们几个程序都要去修改,织梦无论是后台修改模板还是直接ftp传下来文件修改都是很简单明了的。但是帝国就不一样了,自己做的帝国站自己最熟悉,但是其他人接过去就先要熟悉你整站的思路,哪部分用的什么变量,哪里用的灵动标签,哪里用的万能标签,用灵动标签还好点,不涉及标签模板,如果是用万能标签,那又要蛋疼了,如果修改的东西在标签模板里,还要去找所在的标签模板,总之熟悉起来还是要点时间的。
安全性:这个织梦真心没法和帝国比,织梦频繁更新各种安全补丁,但是帝国就是没爆什么漏洞,而且帝国模板都是存放在数据库,所以也不会存在被下载的问题,织梦就不同了,往往模板会被轻松地访问到。
生成:感觉织梦用来做一些企业站还是很好的,但是用来做信息量大的门户站之类的,真不行,信息量多了以后,生成速度比帝国慢很多,而且很多朋友都反应信息量多了,织梦程序都要崩溃了,生成整站需要一天的情况都有。
接触帝国cms已经有一些时间了,最近又接触了dedecms,下边就说说最新的感受。 1首先从模板方面来说,dedecms的免费模板还是比较多的,这个得益于广大的dede用户共享。dede的官方模板可以直接使用。而帝国的官方提供的模板是table格式的,比较偏老了。当然如果你有一定html和css基础的还是自己来做的好,毕竟dedecms官方默认模板对于百度收录来讲并不是很好了现在。 2论坛的人气,帝国cms和dedecms的人气还都可以,热心程度感觉帝国cms比dedecms高些。 3版本的更新,帝国以大版本形式更新,dedecms以小版本形式更新,总体来说dede版本快于帝国。 4安全方面:dedecms关注的人比较多,市场占有率相当的高,因而成为黑客的挂马对象,入侵率比较高,容易被黑,而帝国cms而言安全方面则比较好。 5说说使用者最关心的模板制作方面:dedecms的模板标签设计相对帝国cms来说比较更容易入手,从本人自己制作的网站对比,相同的模板页数,dedecms的模板制作速度要快于帝国cms。 6seo优化方面,dedecms要比帝国cms稍胜一筹。 7伪静态生成速度,由于小数据量,无法对比出效果。不过从帝国cms最新的动态来看,才用新结构的帝国cms对于海量数据的处理更有优势。 8模板修改方面,由于帝国的模板在后台进行编辑,要比dedecms的更方便修改。 9个人对比,两个站分别用dedecms和帝国cms收录相对较快的是帝国cms,这个可能跟网站性质和结构内容运作也有关系。
通常解决方案是取消后台验证码功能:打开data/safe/incsafeconfigphp把代码中的$safe_gdopen = '1,2,3,4,5,6,7';中的6,删除即可。
一般验证码出不来,可能原因是:验证码需要GD库,请检查你的环境是否开启GD库。
或者打开验证码生成文件include/vdimgckphp找到
for($i=0;$i<$rndcodelen;$i++)
{
$bc = mt_rand(0, 1);
$rndstring[$i] = strtoupper($rndstring[$i]);
$c_fontColor = $fontColor[mt_rand(0,4)];
$y_pos = $i==0 4 : $i($font_size+2);
$c = mt_rand(0, 15);
@imagettftext($im, $font_size, $c, $y_pos, 19, $c_fontColor, $font_file, $rndstring[$i]);
$lastc = $rndstring[$i];
}
imagettftext()函数没有成功执行导致了验证码不显示,具体原因为字体文件路径不对,解决办法是确认include/data/fonts/里面存在字体文件默认为ggbittf,在for($i=0;$i<$rndcodelen;$i++) 上一行 加上如下代码:$font_file= str_replace("\\","/",$font_file);即把字体文件路径中反斜杠替换成斜杠 因为我们知道反斜杠有转译字符的功能,$font_file 路经大体为 盘符:\appserv\www 系统错误的把反斜杠 当作转义用了 导致font_file也就不是一个路径了 所以Imagettftext()函数总是返回错误,加上$font_file=str_replace("\\","/",$font_file);即可解决
还一种可能是include/data/words/wordstxt文件不存在
解决办法就是拷贝一个进去,且找到代码 'word_type' => (int)$safe_codetype,// 1:数字2:英文3:单词
换成'word_type'=>1(或2)既验证码为数字或英文
如果原来可以显示后来取消验证码后再设置就无法显示,可以通过覆盖data与include目录试试。
0条评论