问题
生产环境使用的是PHP5.6,但连接有使用到mongo。
本地开发环境也是用的PHP5.6.40,但同样代码提示报错
Fatal error: Class 'MongoClient' not found
配置
系统:Win7
版本:php5.6.40,VC11,TS
扩展:MongoDB extension version 1.5.3
但是这一段代码在线上环境却运行成功
try {
$conn = new MongoClient("mongodb://" . $config['username'] . ':' . $config['password'] . '@' . $config['host'] . ':' . $config['port']);
$dbs = $conn->selectDB($dbname);
$mongo = $dbs->selectCollection($table);
$device = $mongo->findOne(['id' => $id]);
} catch (Exception $e) {
//
}
排查
E:\test>d:/php56/php.exe -m
[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
ereg
filter
ftp
hash
iconv
json
libxml
mbstring
mcrypt
mhash
mongodb
mysqlnd
odbc
pcre
PDO
Phar
redis
Reflection
session
SimpleXML
SPL
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
我记得我是安装了php_mongodb.dll的扩展的,如上。
因为我在电脑里同时安装了PHP7.3,和对应 php_mongodb.dll,PHP73可以直接执行对mongodb的操作。
解决方案
网上搜索到的资料,仔细看才发现两个扩展名字是不一样的。
PHP5.6需要 php_mongo.dll而不是php_mongodb.dll。下载 php_mongo.dll 安装即可。
下载地址
电脑PHP5的版本是 PHP5.6 - TS - VC11 所以选择对应版本:
-
php_mongo-1.6.10-5.6-ts-vc11-x64 (必须安装)
https://windows.php.net/downloads/pecl/releases/mongo/1.6.10/php_mongo-1.6.10-5.6-ts-vc11-x64.zip -
php_mogodb-1.5.3-5.6-ts-vc11-x64(安装了也没用途,但PHP7是安装这个)
https://windows.php.net/downloads/pecl/releases/mongodb/1.5.3/php_mongodb-1.5.3-5.6-ts-vc11-x64.zip