问题
生产环境使用的是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

生产和本地开发环境均使用PHP5.6,本地连接MongoDB代码报错,线上却运行成功。排查发现电脑同时安装了PHP7.3及对应php_mongodb.dll,PHP7可操作MongoDB。解决方案是PHP5.6需下载php_mongo.dll安装,并给出对应版本下载地址。
31万+

被折叠的 条评论
为什么被折叠?



