ホームページ > 記事 > PHPフレームワーク > swoole 拡張機能のインストールが失敗した場合の対処方法
swoole 拡張機能のインストールが失敗した場合はどうすればよいですか? swoole インストール エラーの詳細な説明
推奨学習: swoole チュートリアル
今日は pecl を介して swoole をインストールしました
pecl install swoole
手順は非常に簡単です, しかし、最終的にインストールは成功しました その後、phpinfo() で swoole 拡張機能が表示されていないことに気付き、
php -m | grep swoole
を実行すると、次のエラーが見つかりました:
#エラー レポートを注意深く見てみると、このエラー レポートは swoole が原因であることがわかりました。swoole.so の読み込み時に mysqlnd_find_charset_nr が見つからないことを示す .so が報告されています。これは、mysqlnd で始まるキーワードであり、 mysqlnd は PHP の拡張機能です。swoole/swoole.mysql.c を読むと、ソース コードの次のセクションが見つかりました:PHP 警告: PHP 起動: ダイナミック ライブラリ '/usr/lib64/php/modules/swoole.so' をロードできません - /usr/lib64/php/modules/swoole.so: 未定義のシンボル: mysqlnd_find_charset_nr (行 0## に不明)
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 警告: PHP 起動: 動的ライブラリ '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/ modules をロードできません/swoole.so: 未定義のシンボル: php_sockets_le_socket in Unknown on line 0
解決策は同様です:
1. /etc/php を変更します ソケットを削除します.ini ファイルを .d/ ディレクトリに追加します。2. /etc/php.ini の extension=swoole.so の上の行に extension=sockets.so を追加します。3. php- を再起動します。 fpm以上がswoole 拡張機能のインストールが失敗した場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。