Php &引用;libcrypto.so.1.0.0:version';OPENSSL_1.0.1';“未找到”;在shell_exec期间

Php &引用;libcrypto.so.1.0.0:version';OPENSSL_1.0.1';“未找到”;在shell_exec期间,php,git,github,ssh,openssl,Php,Git,Github,Ssh,Openssl,我在PHP中使用shell_exec运行git命令时遇到了一个奇怪的问题。这是一个全新的Ubuntu 16.x LTS映像,只安装了Lampp和git包的副本。在我打算webhook的php脚本中,运行shell_exec('/usr/bin/git pull 2>&1')打印出以下错误 ssh: /opt/lampp/lib/libcrypto.so.1.0.0: version 'OPENSSL_1.0.1' not found (required by ssh) fatal: Could

我在PHP中使用shell_exec运行git命令时遇到了一个奇怪的问题。这是一个全新的Ubuntu 16.x LTS映像,只安装了Lampp和git包的副本。在我打算webhook的php脚本中,运行
shell_exec('/usr/bin/git pull 2>&1')
打印出以下错误

ssh: /opt/lampp/lib/libcrypto.so.1.0.0: version 'OPENSSL_1.0.1' not found (required by ssh)
fatal: Could not read from remote repository.`
我可以使用
git pull
从命令行提取存储库,并且运行apache的用户拥有htdocs目录中所有文件的所有权

openssl版本-a
产生以下结果:

OpenSSL 1.0.2g-fips  1 Mar 2016
built on: reproducible build, date unspecified
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN
-DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security
-Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall
-DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5
-DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM
-DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/lib/ssl"

这是Lamp 5.6.21的问题,还是我的设置有问题?

因此您将XAMPP安装到
/opt/lampp
中,并尝试通过
shell_exec()
运行本机(来自Ubuntu,而非XAMPP)git。这个shell运行的环境是什么?这是XAMPP与
LD_LIBRARY\u PATH
set
/opt/lampp/lib
一起使用的环境,这是所有XAMPP组件绝对需要的(因为它们是为了使用
/opt/lampp/lib
中的这些库而构建的)。然后git继承了同样的环境,并且(尽管它在
/lib/x86\u 64-linux-gnu
中的某个地方有来自Ubuntu的完美openssl库)尝试使用
/opt/lampp/lib
中的库

您需要的只是在git调用之前清除
LD\u LIBRARY\u PATH
环境变量,如:

$oldldpath = getenv('LD_LIBRARY_PATH');
putenv("LD_LIBRARY_PATH=");
shell_exec('/usr/bin/git pull 2>&1');
putenv("LD_LIBRARY_PATH=$oldldpath");

听起来您没有从命令行上的命令行类型
openssl版本-a
安装
openssl
。它是OpenSSL 1.0.1还是1.0.2?(听起来您的远程repo提供的是针对1.0.1构建的二进制文件)。我添加了命令的输出,看起来是1.0.2版,是否需要降级?@Sidriel-您可能已经满足:(1)下载/构建OpenSSL 1.0.1。(2) 安装在
/opt/openssl-1.0.1
。(3) 制作一个启动PHP的脚本,并使用类似于
LD_LIBRARY_PATH=“/opt/openssl-1.0.1/lib:$LD_LIBRARY_PATH”/opt/lampp/bin/PHP