乙個BOM引起的Hessian血案

2021-09-21 00:05:12 字數 2735 閱讀 2548

6月11日下午專案上線乙個新的功能之後,12日上午發現,與外部服務通過hessian互動的功能失效。一邊與兄弟部門的同學一起查詢一邊進行**回滾(也是我到公司一年以來第一次**回滾)。

發現呼叫hessian時候會報錯 1

2

3

4

5

6

7

8

9

10

[12-jun-201506:47:44utc] 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 line169

我就把開發環境的**也回滾到之前的分支,使用git的好處就在這裡了!強烈建議沒有使用的同學也要切換到git。

切換分支後發現沒有報錯的情況。此時基本可以確定是新功能的**出現問題!

所以我將只要修改的**就替換一下再執行,就這樣試了幾個檔案發現其中乙個檔案只要替換了就出現

hessian報錯。

終於找到罪魁禍首了,但是我認真的看了**,就是沒有發現錯誤的**。這就詭異了!

就在此時想起我寫這個**時候使用過文字編輯器處理過編碼,使用文字一開啟發現檔案頭中包含了bom魔術頭!

好傷心!就是因為這個問題導致的。之後續的處理中發現

還有乙個現象值得注意:如果php檔案頭<?php  不頂格也會報錯的。

memcpy引起的乙個bug

void memcpy void dest,const void src,size t n 由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內。memcpy dest,0,5 真正應該使用的是 memset dest,0,5 關於memset memset 函...

乙個引數引起的血案

問題產生實際情況 資料庫被強制乾掉,空間漲到100 分析 經觀察發現是由於pg log目錄增長過快導致磁碟空間被爆。pg log是如何產生的?記錄資料庫執行日誌,內容可讀,預設關閉,需要設定引數啟動。1.error資訊。2.定位慢查詢sql。3.資料庫的啟動關閉資訊。4.pg系統相關警告資訊等。根據...

乙個ID引起的血案

最近用asp寫程式時,剛開始支援的資料庫是access,程式裡有一段 是往資料庫裡新添一條記錄,方法為先建立乙個recordset,然後用addnew和update方法來實現資料新增。addnew之後便能取得新增記錄的id號。後來程式移植到伺服器上時,由於伺服器安裝的是sql server 2000...