我在 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 pull 存储库,并且运行 apache 的用户拥有 htdocs 目录中所有文件的所有权。

openssl version -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() 运行 native (如来自 Ubuntu,而不是 XAMPP)git 。这个shell运行的环境是什么?这是 XAMPP 使用 LD_LIBRARY_PATH 的环境设置/opt/lampp/lib ,这对于所有 XAMPP 组件都是绝对需要的(因为它们是为了使用 /opt/lampp/lib 中的这些库而构建的)。然后 git 继承这个相同的环境,并且(尽管它在 /lib/x86_64-linux-gnu 中的某个地方有来自 Ubuntu 的完美 openssl 库)尝试使用 /opt/lampp/lib 中的库。 ,砰。

您需要的只是清除 LD_LIBRARY_PATH git 调用之前的环境变量,例如:

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!