DedeCMS更新主页空白,一键更新空白

1477887971840907.png

  今天网站升级更新改板,突然进入后台更新主页,没反应,下方进行状态没有任何显示,一键更新网站,一样也是没有任何显示;


  然后直接百度,发现出现这个问题的人还挺多,问题原因挺多,解决方案查找方案也挺多:

    1、有数据库信息写错的,要仔细检查 data/common.inc.php 里面的信息;

    2、有缓存问题的,要清下缓存,删除掉原首页,再生成;

   3、如果dedecms 是重新部署到linux环境下,一定要检查下相关目录的写入权限特别是一些缓存目录

   4、模板标签写错,中英文或多了少了空格等字符,这个在网上评价最坑,因为最难查找;

   5、还有可能 dedecms 被植入木马,需要还原文件,或删除可疑文件,更新缓存,重新生成即可。

   6、修改 dedecms 报错级别设定,include/common.inc.php 的第一代码行:error_reporting,而且代码中也有注释,一看就明白,取消注释 12行,注释13行,即可显示dedecms报错信息;


  悲剧的是上面方法我都使用了,特别是第6个方法,折腾半天,还是没有错误信息,无奈情况下调试代码,发现 dedecms对 fopen、eval等执行函数大量用到 @fopen、@eval;

  神啊,大家知道 php中@ 的功能是阻止警告错误信息输出,虽然对能正常运行的代码这个方法能屏蔽无用的警告信息,但是出错信息一样抛不出来;

  终于经调试后,发现我的错误来自 include/dedetag.class.php 的EvalFunc方法,方法在960行,出错在967行,

就是 @eval($functionname.";"); //or die(""); 

当我把@符号去掉,错误信息终于出来了,原来覆盖的自定义函数文件,无法找到自定义函数!


如下是去掉@后的抛错信息,立马找到问题所在:

( ! ) Fatal error: Call to undefined function byaidgetfirstimgurl() in ..\include\dedetag.class.php(967) : 

eval()'d code on line 1

Call Stack
#TimeMemoryFunctionLocation
10.0062149696{main}( )...\makehtml_homepage.php:0
23.00491395232PartView->SaveToHtml( string(45), ??? )...\makehtml_homepage.php:47
33.00491395296DedeTagParse->SaveTo( string(45) )...\arc.partview.class.php:196
43.00521395792DedeTagParse->GetResult( )...\dedetag.class.php:771
53.00531396272DedeTagParse->AssignSysTag( )...\dedetag.class.php:733
63.03071403184DedeTagParse->IncludeFile( string(24)string(0) )...\dedetag.class.php:607
73.03791430224MakeOneTag( object(DedeTagParse)[20]object(PartView)[3], ??? )...\dedetag.class.php:1044
83.04251550624lib_arclist( object(DedeTag)[51]object(PartView)[3] )...\channelunit.helper.php:558
93.04411552336

lib_arclistDone( object(PartView)[3]object(DedeTag)[51]string(2)string(2)string(0)string(0)

string(0),string(0)string(0)string(0)string(0),

 string(0)string(920)longstring(0)string(0)string(0)string(0),string(0)string(0)

string(0)string(0)string(0)string(0) )

...\arclist.lib.php:136
103.05191594320DedeTagParse->Assign( longstring(3), ??? )...\arclist.lib.php:535
113.05201594360DedeTagParse->EvalFunc( string(3)string(24)object(DedeTag)[51] )...\dedetag.class.php:552
123.05211595576eval( '$DedeFieldValue = getfirstimgurl($DedeFieldValue);' )...\dedetag.class.php:967