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