Linux下php擴展加載順序衝突的解決方案

Linux下php擴展加載順序衝突的解決方案

比如,在安裝swoole的時候開啓了mysqlnd的支持,那麼就需要先加載mysqlnd擴展。
查看:php -m | grep mysqlnd

安裝好swoole後,在php.ini中增加 extension=swoole.so

php -m | grep swoole

發現報錯:
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/swoole.so’ - /usr/lib64/php/modules/swoole.so: undefined symbol: mysqlnd_cset_escape_slashes in Unknown on line 0

其實就是沒有加載到mysqlnd擴展,導致swoole記載失敗,因爲php.ini中的擴展優先加載,然後再加載 php.d 目錄下擴展,所以就衝突了。

mysqlnd在安裝php的時候就安裝好了,而且/etc/php.ini中沒有mysqlnd.so,那麼實際上它是在/etc/php.d/mysqlnd.ini中加載的。

cd /etc/php.d
ls

可以看到目錄下包含很多擴展,在這個目錄下的擴展加載不會存在先後順序,比較合理,並且我們以後自己安裝的擴展儘量都在這裏加載。

查看mysqlnd.ini文件內容:
cat mysqlnd.ini
; Enable mysqlnd extension module
extension=mysqlnd.so

所以,先刪除php.ini中的swoole.so加載。

cd /etc/php.d
cp mysqlnd.ini swoole.ini
vi swoole.ini
修改爲 swoole.so

php -m | grep swoole

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章