首頁 >php框架 >Swoole >swoole擴充安裝失敗怎麼辦

swoole擴充安裝失敗怎麼辦

藏色散人
藏色散人原創
2020-02-04 15:06:343972瀏覽

swoole擴充安裝失敗怎麼辦

swoole擴充功能安裝失敗怎麼辦? swoole安裝報錯詳解

推薦學習: swoole教學

今天透過pecl安裝swoole

pecl install swoole

步驟很簡單,但最後安裝成功後來發現phpinfo()中未顯示swoole擴展,執行:

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_find_charset_nr in Unknown on line 0

##woole .so報出來的,說明在載入swoole.so的時候報的找不到mysqlnd_find_charset_nr ,這是一個以mysqlnd 打頭的一個關鍵字,而mysqlnd 又是PHP 的一個擴展,透過閱讀swoole/swoole.mysql.c的原始碼我們發現有以下一段:

const MYSQLND_CHARSET* cset = mysqlnd_find_charset_nr(client->connector.character_set);
 
if (cset == NULL)
{
 
    swoole_php_fatal_error(E_ERROR, "unknown mysql charset[%s].", client->connector.character_set);
 
    RETURN_FALSE;
 
}
從上面的原始碼我們可以看出,原來swoole 是需要依賴msyqlnd 這個擴充的,我們發現phpinfo() 裡面msyqlnd 擴充功能是存在的為什麼還會報這個錯呢。

最後發現PHP預設載入的擴充都在/usr/lib64/php/modules/ 這個目錄裡在,這裡面的.so 檔案是預設載入的,關於這些擴充的配置不是在/etc/ php.ini 中,而是在/etc/php.d/ 這個目錄中,這個目錄當中的所有的.ini 檔案是在/etc/php.ini 載入完成後再載入的,而我們的extension=swoole. so 的配置是寫在/etc/php.ini 的檔案結尾,所以是先載入了swoole.so 然後再載入mysqlnd.so,這就導致了swoole 找不到mysqlnd_find_charset_nr 。

 

解決方法:

1、將/etc/php.d/ 目錄中的mysqlnd.ini檔案刪除

#2、在/etc/php.ini 的extension=swoole.so 上面一行新增extension=mysqlnd.so

3、重新啟動php-fpm 

這樣可以解決問題了,同樣也可能會遇到以下報錯:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/ modules/swoole.so: undefined symbol: php_sockets_le_socket in Unknown on line 0

##解決的方法也是類似的:

###1、將/etc/php .d/ 目錄中的sockets.ini檔案刪除######2、在/etc/php.ini 的extension=swoole.so 上面一行新增extension=sockets.so######3、重新啟動php-fpm ###

以上是swoole擴充安裝失敗怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn