萬(wàn)萬(wàn)沒(méi)想到,php着裹,你领猾,竟是這樣的語(yǔ)言

常言道常在河邊走,哪能不濕鞋骇扇。作為天天寫php的老司機(jī)摔竿,時(shí)不時(shí)就會(huì)被php的某個(gè)特性給坑一下。周末整理了三個(gè)自己或者身邊朋友碰到的最坑爹的case少孝,分享給大家继低。

一、為啥接口偶爾會(huì)報(bào)簽名錯(cuò)誤呢稍走?

做過(guò)接口開(kāi)發(fā)的phper都知道袁翁,往往為了安全性,接口都會(huì)增加一個(gè)簽名字段婿脸,用來(lái)保證安全粱胜。但是,如果一個(gè)運(yùn)行良好的接口狐树,就是有不那么高的概率報(bào)簽名錯(cuò)誤焙压,到底是怎么回事呢?

這是我實(shí)際碰到的一個(gè)case褪迟,我們?cè)谡{(diào)用其它服務(wù)時(shí)冗恨,有時(shí)會(huì)出現(xiàn)簽名錯(cuò)誤的錯(cuò)誤碼。這個(gè)事情很詭異味赃。因?yàn)槲覀兊暮灻怯脗鬟f的參數(shù)加上秘鑰md5得到的掀抹,接收方也是一樣的方式來(lái)校驗(yàn)。我們算簽名是發(fā)送前的最后一步心俗,算完簽名就扔給接收方了傲武。如果簽名要是錯(cuò)了蓉驹,那肯定就是算法錯(cuò)了【纠可是這種一會(huì)對(duì)一會(huì)錯(cuò)的态兴,到底算個(gè)啥?

后來(lái)我們?cè)诎l(fā)送方和接收方都打了日志疟位,好不容易又出現(xiàn)了這個(gè)case瞻润,趕緊拉出來(lái)分析。不看不知道甜刻,看了氣吐血绍撞。看看下面這個(gè)圖:

是的得院,你應(yīng)該猜到了傻铣。在我們發(fā)送方計(jì)算的時(shí)候,由于是使用字符串連接來(lái)做的加密串計(jì)算祥绞,所以會(huì)有x等于空字符串非洲,y等于空字符串來(lái)參與計(jì)算簽名。而發(fā)給接收方的時(shí)候蜕径,經(jīng)過(guò)了一道http_build_query两踏,接收方收到了一個(gè)為0的x,而且沒(méi)有收到y(tǒng)兜喻。簽名算出來(lái)自然不對(duì)了缆瓣。

由于生成的參數(shù)值偶爾會(huì)有false或者null這種值,所以簽名會(huì)偶爾報(bào)錯(cuò)虹统。我有理由相信,很多經(jīng)驗(yàn)豐富的老司機(jī)隧甚,開(kāi)到這里都會(huì)栽一下车荔。如果不小心栽在某個(gè)重要接口上,真心是渾身有嘴都說(shuō)不清戚扳。

二忧便、奇怪了,不是有值嗎帽借?怎么empty是true?

這個(gè)case是我朋友的珠增,但是絲毫不影響我把它放在這篇分享坑爹case的文章里。首先看看下面的代碼及結(jié)果:

神奇吧砍艾?猜猜看蒂教,為啥?

好脆荷,可能你有個(gè)猜想凝垛,不過(guò)我們先看看class a的定義懊悯。

事實(shí)上,是因?yàn)閑mpty里面有個(gè)isset的判斷梦皮,自然class a沒(méi)有x這個(gè)屬性炭分,所以empty就返回了true。在這個(gè)代碼里面剑肯,這個(gè)問(wèn)題倒是很簡(jiǎn)單捧毛。可是實(shí)際開(kāi)發(fā)中让网,很多框架或者自己的代碼都會(huì)使用__get呀忧,到時(shí)候判斷的時(shí)候,任你多少年的老司機(jī)寂祥,稍微一不注意荐虐,車輪就進(jìn)來(lái)了。這種bug可是bool的顛倒丸凭,完全改變了后續(xù)的邏輯福扬,想想就知道多恐怖。

三惜犀、咦铛碑?配置文件報(bào)錯(cuò)?

最后來(lái)個(gè)屗浣纾坑老司機(jī)的汽烦。老司機(jī)到了一定層次,會(huì)自己寫一些會(huì)手動(dòng)載入配置的代碼莉御,比如下面這個(gè)db的示例撇吞。

很熟悉對(duì)不對(duì),粗看沒(méi)有問(wèn)題對(duì)不對(duì)礁叔‰咕保可是你發(fā)現(xiàn)這貨跑著跑著會(huì)報(bào)錯(cuò)。你去review也找不到問(wèn)題點(diǎn)琅关。var_dump加上exit吧煮岁,也沒(méi)啥問(wèn)題。郁悶死了對(duì)不對(duì)涣易。

這個(gè)示例代碼很短画机,而且明確的指出了可能出問(wèn)題的地方,相信大家都找到了問(wèn)題所在:第二次實(shí)例化DB的時(shí)候新症,載入的config是true步氏,而不是數(shù)組。這是因?yàn)閞equire_once在第二次載入同一個(gè)文件的時(shí)候账劲,就會(huì)直接返回true了戳护。

對(duì)于這種第二次才犯病的bug金抡,如果一開(kāi)始不出現(xiàn),這個(gè)雷就潛伏了下來(lái)腌且。而且這種代碼可能一般是很基礎(chǔ)的很底層的代碼梗肝,說(shuō)不好某個(gè)時(shí)候你就寫了個(gè)正常的代碼,這雷就炸了铺董,而且還炸在另一個(gè)毫無(wú)關(guān)聯(lián)的地方巫击。

祝大家好好開(kāi)車,爭(zhēng)做平平安安的好司機(jī)精续。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坝锰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子重付,更是在濱河造成了極大的恐慌顷级,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件确垫,死亡現(xiàn)場(chǎng)離奇詭異弓颈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)删掀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門翔冀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人披泪,你說(shuō)我怎么就攤上這事纤子。” “怎么了款票?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵控硼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我艾少,道長(zhǎng)象颖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任姆钉,我火速辦了婚禮,結(jié)果婚禮上抄瓦,老公的妹妹穿的比我還像新娘潮瓶。我一直安慰自己,他們只是感情好钙姊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布毯辅。 她就那樣靜靜地躺著,像睡著了一般煞额。 火紅的嫁衣襯著肌膚如雪思恐。 梳的紋絲不亂的頭發(fā)上沾谜,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音胀莹,去河邊找鬼基跑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛描焰,可吹牛的內(nèi)容都是我干的媳否。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荆秦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼篱竭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起步绸,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掺逼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瓤介,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吕喘,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年惑朦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兽泄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漾月,死狀恐怖病梢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梁肿,我是刑警寧澤蜓陌,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吩蔑,受9級(jí)特大地震影響钮热,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烛芬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一隧期、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赘娄,春花似錦仆潮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至揍堰,卻和暖如春鹏浅,著一層夾襖步出監(jiān)牢的瞬間嗅义,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工隐砸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留之碗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓凰萨,卻偏偏與公主長(zhǎng)得像继控,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胖眷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理武通,服務(wù)發(fā)現(xiàn),斷路器珊搀,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程冶忱,因...
    小菜c閱讀 6,424評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評(píng)論 25 707
  • 文/潘濤 圖/李毅 久旱遇甘霖,日出云又覆境析。周末逢夏收囚枪,老李歸家中。鳳凰有男兒劳淆,稚童上田埂链沼。場(chǎng)中麥粒新,枝上青杏...
    風(fēng)_行水上閱讀 604評(píng)論 0 7
  • 家里的柯基寶寶天生就是小短腿,不過(guò)它從沒(méi)有因此向命運(yùn)低頭曲掰。上能和金毛比賽跑步疾捍,下能和二哈一起游泳,每天總是一副無(wú)憂...
    萌寵小馬甲閱讀 699評(píng)論 0 1