私はPHP CLI(Ubuntuでは7.0.7))をmysqliと一緒に動作させようとしましたが、成功しません。起動時に同じエラーメッセージが表示され続けます。
mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
これは、php -iからの出力の一部です(両方がロードされたことを明確に示しています)。
mysqli
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0
Directive => Local Value => Master Value
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_Host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
Compression => supported
core SSL => supported
extended SSL => supported
Command buffer size => 4096
Read buffer size => 32768
Read timeout => 31536000
Collecting statistics => Yes
Collecting memory statistics => No
Tracing => n/a
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions => mysqli,pdo_mysql
PHPはSudo apt install php7.0-cli
を使用してインストールされました。
なにが問題ですか?
Mysqlndの後にmysqliをロードすると、問題が解決します。だが
phpenmodを使用してモジュールを有効にする場合、アルファベット順にモジュールが有効になります。 mysqliはmysqlndの前にあります。
シンボリックリンクの名前をmysqliからzmysqliに変更することでこれを回避しました-粗雑ですが、うまくいきました。
私の状況(Debian 9)では、順序は正しかった:php-mysqlnd.iniファイルがモジュールのリストの一番上にあった。モジュールの順序を変更するには、末尾の番号を変更するだけです。そのため、mods-availableの.iniファイルを指す「10-mysqlnd.ini」および「20-mysqli.ini」リンクが必要です。私が気づいたのは、おそらく間違ったインストールのために、「mysqlnd.ini」ファイルが空であることでした。 「extension = mysqlnd.so」(ライブラリファイルが正しくインストールされている)などのコンテンツを追加しただけで、すべてが機能しました。
その理由は、mysql/php-mysqli/mysqli/php-mysqli拡張機能をロードする前にmysqlndをロードする必要があるためです。
これらの拡張機能をロードする前に、php.iniでphp-mysqlndがロードされているかどうかを確認してください。時々、Apacheはすべての拡張子を別々の.iniファイルに分離することを決定しました。ファイルの名前を変更して、mysqlndファイルがphp-mysqli拡張およびフレンドの前にロードされることを確認する必要があります。