2016-06-14 6 views
1

PHPでgitコマンドを実行するためにshell_execを使用して奇妙な問題が発生しています。これはUbuntu 16.x LTSの新しいイメージで、Lamppのコピーとgitパッケージのみがインストールされています。私がwebhookするつもりのPHPスクリプト内で、shell_exec('/usr/bin/git pull 2>&1')を実行すると、次のエラーが表示されます。"libcrypto.so.1.0.0:shell_exec中に 'OPENSSL_1.0.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.` 

私は、コマンドラインから実行すると、ユーザーapacheのはhtdocsディレクトリ内のすべてのファイルの所有権を持っていることをgit pullを使用してリポジトリを引くことができます。以下で

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" 

が、これはランプ5.6.21の問題ですか、これは私のセットアップに問題がありますか?

+0

あなたは 'openssl'が-a'上のコマンドライン –

+1

タイプ' opensslのバージョンからインストールされていないような音コマンドライン。 OpenSSL 1.0.1または1.0.2ですか? (リモートリポジトリは1.0.1に対してビルドされたバイナリを提供しているようです。 – jww

+0

コマンドの出力を追加しました。バージョン1.0.2のように、ダウングレードが必要ですか? – Sidriel

答えて

1

/opt/lamppにXAMPPがインストールされていて、ネイティブを実行しようとしています(XAMPPではなく、Ubuntuから来ているように)。shell_exec()経由です。このシェルが実行される環境は何ですか? LD_LIBRARY_PATH/opt/lampp/libに設定した環境は、XAMPPがすべてのXAMPPコンポーネントに絶対に必要です(/opt/lampp/libからこれらのライブラリを使用するように構築されているため)。そして、gitはこの同じ環境を継承します(ただし、Ubuntuの完全なopensslライブラリが/lib/x86_64-linux-gnuのどこかにあります)、/opt/lampp/lib、bangのライブラリを使用しようとします。あなたが必要なもの

は次のように、直前のgitの呼び出しにLD_LIBRARY_PATH環境変数をクリアすることです:

$oldldpath = getenv('LD_LIBRARY_PATH'); 
putenv("LD_LIBRARY_PATH="); 
shell_exec('/usr/bin/git pull 2>&1'); 
putenv("LD_LIBRARY_PATH=$oldldpath"); 
関連する問題