2016-08-23 133 views
2

我使用PHP和couchbase的NoSQL數據庫,當我安裝在Ubuntu couchbase-EXT我在php -m命令得到了一個erorr象下面這樣:CouchBase擴展安裝錯誤

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20131226/couchbase.so' - /usr/lib/php/20131226/couchbase.so: undefined symbol: _zend_hash_str_update in Unknown on line 0 

回答

3

我們有同樣的問題在這裏。這是故事,以及我們如何修復它。

在我們的機器上,我們試圖讓PHP 5.6運行,並且希望編譯PHP擴展以對抗它。我們還在同一臺機器上安裝了PHP 7.1和PHP 7.0。 PECL把編譯好的文件放入/usr/lib/php/20151012/couchbase.so,它不在extension_dir定義的路徑之內,所以我們必須完全設置它才能在PHP5.6中加載它,並且出現類似於你的錯誤...我們後來注意到的是,文件夾20151012的名稱代表PHP API版本,它通常隨每個PHP版本而變化。由於我們反正沒有使用後來的PHP版本,我們只是刪除了PHP 7.1和7.0並再次嘗試。現在它正確編譯了PHP 5.6,將這個文件保存到/usr/lib/php/20131226/couchbase.so,我們可以使用它。

長話短說:

當編譯擴展,PECL把它放到像/usr/lib/php/20131226一個文件夾。最後一個文件夾名稱表示此擴展程序針對的PHP API。請致電php -i | grep 'PHP API'查看您的版本,看看這些數字是否匹配。

如果您還安裝了多個PHP版本,並希望保留它們,這個答案可能會有所幫助:pecl installs for previous php version

一個有用的提示

PHP有一個叫做extension_dir變量,它是所有的前綴使用相對路徑加載的擴展路徑。如果只是通過設置文件名來加載模塊(並讓PHP添加前綴),則不應該有這些問題。請注意,您必須使用加載爲zend_extension的擴展程序的絕對路徑 - 作爲f.e. xdebug ...