Discuz出现“内部错误,无法显示此内容”

手册/FAQ (487) 2016-02-19 09:36:32

      前一段时间帮一个朋友修改用DZ程序做的网站的模板的时候出现了问题,就是网站突然出现“内部错误,无法显示此内容”问题。大家都知道DZ是完全把主体程序和前端模板拆开 的,这一点也可以说是一套优秀程序的一个特征,这一点全球知名的开源程序WordPress也是如此。而DZ还有一个易用的功能就是模块DIY功能,这个功能可以让很多连HTML都不懂的站长朋友制作自己个性化的模块。

  然而出现这个问题基本上网站的一切都无法操作,在DIY点开诸如数据、样式、属性等所有选项都有报错。而这时候我朋友有总在问我搞定了没,因为答应他在规定的时间里帮他解决首页的模板,但遇到这个问题我都不敢跟他说,因为我也没有绝对的把握说这个东西不是我造成的,虽然在我看来操作前端的样式的时候不可能造成这种错误,但在实际当中一切意想不到的的事情都可能发生。

  于是我只能硬着头皮去自己搜索答案,在网上搜索了十多分钟,发现大多数人提这样的问题都没有什么结果,回答最多的就是更新缓存之类的,似乎这个程序出现所有问题都是没有更新后台缓存造成的,当然DZ的很多时候都需要更新后台缓存,特别是修改了东西让其生效的时候。

  搜索了一圈也没解决问题,虽然有很多答案得到了最终的解决方案,但那些情况跟我的实际并不相符,因为我在出现故障前后只是操作了CSS,结果朋友突然说我帮你修改了config中的验证IP功能免得你进后台的时候总是说跳出登陆。结果我让他用备份的这个文件替换就解决问题。

  我从来都不会为解决问题而去解决问题,我总会在自己解决后总结为什么会出现这个问题。于是我还特意保留了故障期间的那些文件跟现在正常的对比,分析了新的问题。总结网上和自己新琢磨出来的做一个总结,造成这个问题最常见的因素有如下几点,当然以后可能有更多的新问题。

  一、修改文件时直接用记事本打开,造成多余的空格,导致程序不能识别XML文件。

  用过DZ那个程序的朋友都知道,在程序中很多地方都使用了XML技术,我们插件和模板的安装文件都是写在XML文件中,然后经过内部函数机制调用执行。还有在模板DIY过程中生成的文件其实也是XML的,比如我们在DIY后导出的文件就是这种格式的。我的这个朋友就是在修改配置文件config的时候直接在ftp中打开造成文件中出现多余空格,造成不能识别xml造成这种错误。因为我后来继续恢复到异常状态打开错误报告,发现上面有一截报错代码就是xml包含的,而下部分是我们正常使用的时候那部分,只是格式很混乱。解决方案就是用DW之类专门编写代码的工具恢复那些文件正常的格式。

  二、修改XML文件错误,导致无法识别。

  在DZ中很多模板的首页都是用DIY制作或者使用了大量的DIY,有时候我们修改模板上面的信息的时候为了省事就不是去一个个框架上编辑修改名称了,而是先导出xml,然后再统一修改它。结果可能使用记事本或者其他不是专门编写代码的工具造成格式混乱,也可能因为一时失误把标签的封闭符号给删除了。都会造成如第一种情况中所出现的那样无法识别的问题,而且很多时候这样的文件能顺利导入程序,但导入后就会发生这样致命的错误。解决的方法就是先清空错误的导入,然后经过合适的工具及正确的方法修改xml使得其没有错误再导入。

  三、在DIY状态下导入了与程序本身冲突或者错误的JS。

  在DZ内部已经自带了很多非常实用的JS特效,比如幻灯片切换和滚动等等,这些特效只需要一个属性值本来就可以直接调用,而且按照这种内置功能实现的特效执行效率会很高。但很多技术上不怎么了解的站长往往喜欢从网上收集一些JS代码,也许那些代码在单独执行的时候确实没有任何错误,但放在DZ程序中就会出现冲突甚至如这里说的这个致命的错误,比如知名的JS框架之一jQuery默认的$就会与DZ冲突,必须经过修改后才能正常使用。其实出现这类故障的时候,往往直接在前台清空DIY都是无效的,最好的解决方案就是去数据库找到模板页面数据的存档表pre_common_diy_data DIY删除最近加入进去的数据记录,然后重新来制作当前页面。

  四、无解诡异的缓存问题。

  这个问题如果说起来会让人觉得废话一样,但我在此前确实就这么解决过好几次出现这种错误的问题。其实我认为并不奇怪,因为DZ是一套充分使用缓存机制的程序,比如我们的前端所看到的很多JS和CSS等都是先通过模板中的文件写入Cache中,然后再让前端读取执行的。很多时候经过前面几种方式修正了错误,但我们在前端查看的时候依然是错误的,这时候就得考虑缓存问题,而且这种问题多出现重新配置的服务器。解决的方法就是重启IIS或者apache之类的web服务器或者干脆重新开机,另外就是检查Cache目录是否写入,因为我们的更改必须让其在执行的时候写入缓存才是生效的。

  以上几种情况是很多人都出现过的问题,也都是亲身所经历的,只是第一种情况是我最近一次所遇到的。虽然一般来讲只要是问题就有解决的方法,但我觉得有时候这样的问题会造成我们浪费大量不必要的时间。最后建议新手朋友不要在自己完全不了解相关知识的时候去随意修改,也希望大家不要图一时方便去直接修改文件以免造成难以发现原因的故障,当然最保险的方式还是在修改前备份我们宝贵的数据。

THE END