溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決swoole擴(kuò)展安裝失敗的問(wèn)題

發(fā)布時(shí)間:2020-12-30 11:56:48 來(lái)源:億速云 閱讀:453 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)如何解決swoole擴(kuò)展安裝失敗的問(wèn)題的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

swoole擴(kuò)展安裝失敗怎么辦?swoole安裝報(bào)錯(cuò)詳解

今天通過(guò)pecl安裝 swoole

pecl install swoole

步驟很簡(jiǎn)單,但是最后安裝成功后發(fā)現(xiàn)phpinfo()中未顯示swoole擴(kuò)展,執(zhí)行:

php -m | grep swoole

發(fā)現(xiàn)報(bào)錯(cuò)如下:

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

仔細(xì)看報(bào)錯(cuò)發(fā)現(xiàn)這條報(bào)錯(cuò)是由swoole.so報(bào)出來(lái)的,說(shuō)明在加載swoole.so的時(shí)候報(bào)的找不到 mysqlnd_find_charset_nr ,這是一個(gè)以 mysqlnd 打頭的一個(gè)關(guān)鍵字,而 mysqlnd 又是 PHP 的一個(gè)擴(kuò)展,通過(guò)閱讀 swoole/swoole.mysql.c 的源碼我們發(fā)現(xiàn)有如下一段:

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;
 
}

從上面的源碼我們可以看出,原來(lái) swoole 是需要依賴 msyqlnd 這個(gè)擴(kuò)展的,我們發(fā)現(xiàn) phpinfo() 里面 msyqlnd 擴(kuò)展是存在的為什么還會(huì)報(bào)這個(gè)錯(cuò)呢。

最后發(fā)現(xiàn) PHP默認(rèn)加載的擴(kuò)展都在 /usr/lib64/php/modules/ 這個(gè)目錄里在,這里面的 .so 文件是默認(rèn)加載的,關(guān)于這些擴(kuò)展的配置不是在 /etc/php.ini 中,而是在 /etc/php.d/ 這個(gè)目錄中,這個(gè)目錄當(dāng)中的所有的 .ini 文件是在 /etc/php.ini 加載完成后再加載的,而我們的 extension=swoole.so 的配置是寫(xiě)在 /etc/php.ini 的文件末尾,所以是先加載了 swoole.so 然后再加載 mysqlnd.so,這就導(dǎo)致了 swoole 找不到 mysqlnd_find_charset_nr 。

解決方法:

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

2、在 /etc/php.ini 的 extension=swoole.so 上面一行添加 extension=mysqlnd.so

3、重新啟動(dòng) php-fpm

這樣可以解決問(wèn)題了,同樣可能還會(huì)遇到以下報(bào)錯(cuò):

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、重新啟動(dòng) php-fpm

感謝各位的閱讀!關(guān)于“如何解決swoole擴(kuò)展安裝失敗的問(wèn)題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI