Ubuntu 下安裝 Yar 擴充套件遇到的問題以及解決方案
本文為原創,轉載請註明出處。
昨天在ubuntu上安裝完yar之後發現yar還是不能用,感覺有些不對勁。
通過在微博上請教 大神和公司的大大之後,問題解決了,下面就來分享這一成果。
如果還沒有做好安裝工作,請看我的上一篇文章,戳這裡。
前面的文章提到,我在安裝完yar之後,在phpinfo()中並沒有看到擴充套件。
同樣的,在函式 extension_loaded("yar") 的證明下,也證明沒有安裝成功。
那麼,這到底是為什麼呢?
首先,開啟 display_startup_errors 。
開啟方式有兩種。
第一,修改php.ini ,新增 display_startup_errors = On
第二,在php檔案中動態設定。 ini_set(‘display_startup_errors’,1);
然後檢視錯誤日誌。
我的Ubuntu的錯誤日誌在 var/log/apache2 ,如果你也和我一樣一開始找不到,那麼就去翻phpinfo(),在 Environment 下的 APACHE_LOG_DIR,就是系統日誌哦。
檢視日誌
然後我發現了這樣的錯誤。
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/yar.so' - /usr/lib/php5/20121212/yar.so: undefined symbol: php_json_decode_ex in Unknown on line 0
這個的意思,就是,沒法載入yar.so,json也沒載入上啊阿魯。
這時候,公司的大大告訴我,他在網上也找到了和我相似遭遇的小夥伴。
大概理解下,就是說,天啦嚕,這裡有個BUG呀,json的載入方式是通過json.ini中載入的,而php會首先載入php.ini,這樣json的載入就會放到最後,但是,memcached的載入必須放到json的後面啊。
問題分析
恩恩,就是這樣。
php的載入方式為首先載入php.ini,載入完php.ini中的設定和擴充套件後,再去載入json.ini,在讀取json.ini中,載入了json這個擴充套件。
這樣就造成了,json是最後載入上的,但是不行,我們的一些擴充套件的載入順序必須放到json之後。
問題解決
在php.ini中,我們手動將 extension=json.so 寫入,讓它提前載入,這樣就不會觸發bug啦。
extension=json.so
extension=msgpack.so
extension=yar.so
重啟apache,開啟pphinfo(),就能看見鳥哥的大作啦。
至此,基於RPC的php擴充套件安裝正式完成!
後記
學習依舊是一個不斷探索、不斷出錯、不斷改正、不斷進步的過程。
我們會越來越強大~!