2018/10/15

PHP server connector 一些 un-documented behaviour

今天是測試 Memcache::connect() 踩到的問題。

先來看看文件上的說明:
Returns TRUE on success or FALSE on failure.
所以我的程式就這樣寫:
$c = new Memcache();
$stat = $c->connect('localhost');

if (false === $stat) {
    echo 'connection failed';
} else {
    echo 'connected to cache server';
}

測試時把 Memcached shutdown 來看看是否會偵測到連線失敗。執行時卻噴了一堆錯誤訊息:
Warning: Memcache::connect(): Can't connect to localhost:11211, Connection refused (111) in /home/u/he5702/tmp/asd.php on line 4

Call Stack:
    0.0001     355600   1. {main}() /home/u/he5702/tmp/asd.php:0
    0.0001     355640   2. Memcache->connect() /home/u/he5702/tmp/asd.php:4

connection failed

文件上面並沒有提到 library 除了回傳 false 以外,還會噴一堆錯誤訊息。萬一這隻是 JSON API 就一定會導致 client parse error。

所以應變方法用「@」來隱藏錯誤訊息:
$stat = @$c->connect('localhost');



寫程式真的很怕遇到 undefine behavior,如果文件上都寫清楚的話,在 dev / staging 上都可以事先檢查、防範。但連文件都沒有寫,就只能等個被廣大的客戶客訴到死 ....。

沒有留言:

張貼留言

除非必要,請不要在回覆時留下您的敏感資訊 (電話、email、地址等)