MongoDBにphpでつなごうとすると、以下のエラーが出ることがある
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mongo.so' - /usr/lib64/php/modules/mongo.so: undefined symbol: php_json_encode in Unknown on line 0
PHP Fatal error: Class 'MongoClient' not found in /root/test.php on line 4
これはMongoDBのPHPドライバ(mongo.so)が、jsonのPHPライブラリ(json.so)よりも先にロードされてしまう事が原因。
私の場合は、/etc/php.ini
にてmongo.soをロードし、/etc/php.d/json.ini
でjson.soをロードする設定であり、/etc/php.ini
が/etc/php.d/*
よりも先に読み込まれるため、このエラーが出ていた。
この場合は/etc/php.ini
内でmongo.soをロードするのでは無く、/etc/php.d/mongo.ini
などの/etc/php.d/json.ini
よりも後に読まれる設定ファイルを作って、その中でmongo.soをロードしてあげればよい。
/etc/php.d/mongo.ini
の設定例は以下の通り。
extension=/usr/lib64/php/modules/mongo.so