如何将MongoDB模块静态编译进PHP以适配AWS Lambda运行
嘿,我之前刚好做过把MongoDB驱动静态编译进PHP的操作,结合你已经完成的步骤,给你梳理下具体的重新编译流程:
静态打包MongoDB驱动到PHP的具体步骤
- 先确认你手头还有MongoDB扩展的源码目录(就是你之前编译生成
mongodb.so时使用的那个源码文件夹),如果不小心删掉了,记得克隆一份和你当前PHP版本兼容的MongoDB驱动源码版本。 - 回到你的PHP源码目录,先清理之前编译留下的残留文件,避免干扰:
make clean - 重新生成编译配置,这一步要把MongoDB扩展的静态编译参数加进去,同时保留你之前成功编译PHP时用的所有其他配置项:
划重点:./configure --prefix=/path/to/your/php/install \ # 这里把你之前编译PHP时的所有配置参数都复制过来 \ --with-mongodb=/path/to/your/mongodb-extension-source--with-mongodb后面跟的是MongoDB扩展的源码根目录,不是.so文件的路径哦。 - 接下来重新编译并安装PHP:
make -j$(nproc) # 用多线程加速编译,nproc会自动获取CPU核心数 make install - 最后验证静态编译是否成功:
运行你新编译的PHP二进制文件,执行以下命令:
看输出列表里有没有php -mmongodb;或者执行代码验证类是否存在:
如果返回php -r "var_dump(class_exists('MongoDB\Driver\Manager'));"bool(true),就说明MongoDB驱动已经成功静态打包进PHP里了。
一些需要注意的小细节
- 一定要保证MongoDB驱动的版本和你的PHP版本兼容,版本不匹配很容易导致编译失败,建议确认好对应兼容版本再操作。
- 如果configure过程中提示找不到libmongoc或libbson依赖,你需要先编译安装这两个库,然后在configure命令里加上它们的路径,比如:
--with-libmongoc=/path/to/installed/libmongoc \ --with-libbson=/path/to/installed/libbson - 重新编译时,之前编译PHP用的所有配置参数都要带上,不然原来的功能或扩展会丢失。
内容的提问来源于stack exchange,提问作者Migsy




