6月11日下午项目上线一个新的功能之后,12日上午发现,与外部服务通过Hessian交互的功能失效。一边与兄弟部门的同学一起查找一边进行代码回滚(也是我到公司一年以来第一次代码回滚)。

发现调用Hessian时候会报错

[12-Jun-2015 06:47:44 UTC] PHP Fatal error:  Uncaught exception 'HessianError' with message 'Hessian Parser, Malformed reply: expected r' in /home/users/ouerqiang/fbiz/baserock/Hessian/Protocol.php:169
	Stack trace:
	#0 /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php(280): HessianParser->parseReply()
	#1 /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php(160): HessianProxy->executeCall('report', Array, 1766142942)
	#2 /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php(73): ProxyFilter->execute(Object(HessianProxy), Object(FilterChain))
	#3 /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php(193): FilterChain->doFilter(Object(HessianProxy))
	#4 /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php(73): PHPErrorReportingFilter->execute(Object(HessianProxy), Object(FilterChain))
	#5 /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php(246): FilterChain->doFilter(Object(HessianProxy))
	#6 /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php(395): HessianProxy->call('report', Array)
	#7 /home/users/ouerqiang/fbiz/modules/common/scripts/budget.p in /home/users/ouerqiang/fbiz/baserock/Hessian/Protocol.php on line 169


我就把开发环境的代码也回滚到之前的分支,使用git的好处就在这里了!强烈建议没有使用的同学也要切换到git。

切换分支后发现没有报错的情况。此时基本可以确定是新功能的代码出现问题!

所以我将只要修改的代码就替换一下再执行,就这样试了几个文件发现其中一个文件只要替换了就出现

Hessian报错。

终于找到罪魁祸首了,但是我认真的看了代码,就是没有发现错误的代码。这就诡异了!

就在此时想起我写这个代码时候使用过文本编辑器处理过编码,使用文本一打开发现文件头中包含了BOM魔术头!

好伤心!就是因为这个问题导致的。之后续的处理中发现

还有一个现象值得注意:如果PHP文件头<?php 不顶格也会报错的。

spacer.gif