学习NO.1 发表于 2016-1-22 22:56:23

DISCUZ!一次UC通信失败的解决的过程

近些日子,道勤主机小编在自己的道勤PHP空间装了一个Discuz在上面进行升级测试,遇到了有一个比较难缠的问题,也就是出现“UC通信失败”,折腾了小编好几天。终于发现了问题,现在把处理问题的过程分享给各位站长朋友,以便各位朋友碰到有类似问题不知道如何解决。
测试环境使用的是正式环境的文件,只是修改了数据库的配置(config_global.php),在网站的根目录,让其连接数据库,其实就是这么简单的修改,让后续问题复杂起来。
论坛很容易就运转起来,但是与uc通信时,却始终提示不成功。小编寻求官方论坛的帮助,在官网上查找了许多文章,也没有找到对症的解决方法。后来小编去下载官方的一个repair_uc.php,用它来测试,也总是提示失败,到最后,发现输出的状态中,有ACSII码的特殊字符,因为是3个字符,而小编使用utf-8编码,所以很容易就联想到utf-8签名(有的称bom头),但具体到时哪一个文件引起,就需要查找了。因为环境是不变的(包括配置文件的修改,所以一时没有意识到是config_global.php的原因),小编只能逐步排查代码,花费一天的上班时间,最终确定问题在include这个配置文件后,页面多输出信息。此时才通过查看文件编码,发现是“utf-8”,而不是“utf-8 无签名”,因为道勤主机PHP空间一直使用“utf-8无bom”,于是另存文件,再测试——通信正常!
原来还是老问题重谈,但是很少会有站长朋友会想到这个UC通信失败的问题竟是这个可恶的bom导致的,所以在这里特意整理成文档方便大家。
道勤主机PHP空间在执行include文件时,有几点是需要注意的,一个是文件的结束符(?>)后,不能有多余的符号或者空行;使用utf-8编码时,要注意文件保存为无签名(或无bom头)格式。否则可能会出些莫名其妙的错误。
希望可以帮助到各位站长朋友!
页: [1]
查看完整版本: DISCUZ!一次UC通信失败的解决的过程