Ubuntu16.04下PHP执行mongorestore/mongoexport遇OPENSSL依赖错误求助
解决PHP执行mongorestore/mongoexport时的OpenSSL符号错误问题
这个错误的核心原因是PHP运行的Web环境(比如Apache)和你的终端环境使用的OpenSSL库路径不一致:终端里能正确找到MongoDB工具依赖的兼容版OpenSSL库,但Web进程加载了系统中不兼容的libcrypto.so.1.0.0,导致出现符号未定义的 relocation error。
下面是具体的解决步骤:
1. 先确认终端环境的正确依赖路径
在终端里执行以下命令,找到MongoDB工具依赖的OpenSSL库位置:
# 定位mongorestore的安装路径 which mongorestore # 查看它依赖的libcrypto库具体路径 ldd $(which mongorestore) | grep libcrypto
你会得到类似这样的输出:
libcrypto.so.1.0.0 => /usr/local/lib/libcrypto.so.1.0.0 (0x00007fxxxxxx)
把路径部分(比如/usr/local/lib)记下来,这是终端里使用的正确库路径。
2. 在PHP中指定正确环境变量后再执行命令
修改PHP里的shell_exec调用,先设置LD_LIBRARY_PATH为刚才找到的正确路径,再执行mongorestore/mongoexport命令。示例修改如下:
// 替换成你刚才获取到的正确lib路径 $correct_lib_path = "/usr/local/lib"; // 执行mongorestore命令 echo shell_exec("LD_LIBRARY_PATH=$correct_lib_path mongorestore -d admin -c contents /opt/lampp/htdocs/project/production/csvfiles/contents.bson --port 27017 -u 'admin' -p 'admin123' --authenticationDatabase 'admin' 2>&1"); // 执行mongoexport命令 echo shell_exec("LD_LIBRARY_PATH=$correct_lib_path mongoexport --db admin --collection contents --fields _id,_type,abuse_flaggers,anonymous,anonymous_to_peers,at_position_list,author_id,author_username,body,closed,comment_count,comment_thread,commentable_id,course_id,created_at,endorsed,historical_abuse,last_activity_at,parent_id,parents_id,sk,thread_type,title,updated_at,visible,votes --out /opt/lampp/htdocs/project/production/csvfiles/out.csv --port 27017 -u 'admin' -p 'admin123' --authenticationDatabase 'admin' 2>&1");
这样做能让PHP调用的shell进程和终端使用相同的库路径,加载到兼容的OpenSSL库。
3. (可选)永久修改Web服务的环境变量
如果不想每次都在命令里手动指定环境变量,可以修改Web服务的全局配置,让Web进程默认使用正确的库路径:
- 如果你用的是Apache:
- 打开Apache环境配置文件:
sudo nano /etc/apache2/envvars - 在文件末尾添加一行:
(替换成你之前获取的正确路径)export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" - 重启Apache生效:
sudo service apache2 restart
- 打开Apache环境配置文件:
- 如果你用的是Nginx+PHP-FPM:
- 打开PHP-FPM的池配置文件(比如
/etc/php/7.0/fpm/pool.d/www.conf) - 添加或修改一行:
env[LD_LIBRARY_PATH] = "/usr/local/lib:$LD_LIBRARY_PATH" - 重启PHP-FPM生效:
sudo service php7.0-fpm restart
- 打开PHP-FPM的池配置文件(比如
额外注意事项
- 确保Web服务器用户(比如
www-data)拥有访问MongoDB工具、上传目录及目标文件的权限; - 如果你的MongoDB工具是通过源码编译安装的,要确认编译时依赖的OpenSSL版本和Web环境最终加载的版本一致。
内容的提问来源于stack exchange,提问作者Raj Patel
相关产品推荐
相关产品推荐

