php - permission - git ssh windows
"Libcrypto.so.1.0.0: versiĆ³n ''OPENSSL_1.0.1'' no encontrado" durante shell_exec (1)
Me encuentro con un problema extraño en PHP usando shell_exec para ejecutar comandos git. Esta es una nueva imagen de Ubuntu 16.x LTS con solo una copia de Lampp instalada y los paquetes de git. Dentro de un script php al que pretendo webhook, ejecutar shell_exec(''/usr/bin/git pull 2>&1'')
imprime el siguiente error.
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.`
Puedo extraer el repositorio usando git pull
desde la línea de comandos y que el usuario que ejecuta apache tiene la propiedad de todos los archivos en el directorio htdocs.
openssl version -a
produce lo siguiente:
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"
¿Es esto un problema con el Lamp 5.6.21, o es esto un problema con mi configuración?
Entonces tienes XAMPP instalado en /opt/lampp
e intentando ejecutar git nativo (como viene de Ubuntu, no de XAMPP) a través de shell_exec()
. ¿Cuál es el entorno en el que se ejecuta este shell? Es el entorno que utiliza XAMPP con LD_LIBRARY_PATH
set /opt/lampp/lib
, que es absolutamente necesario para todos los componentes de XAMPP (porque están diseñados para usar estas bibliotecas de /opt/lampp/lib
). Entonces git hereda este mismo entorno y (aunque tiene una biblioteca openssl perfecta de Ubuntu en algún lugar de /lib/x86_64-linux-gnu
) intenta usar librerías de /opt/lampp/lib
, bang.
Lo que necesita es borrar la LD_LIBRARY_PATH
entorno LD_LIBRARY_PATH
antes de la invocación de git, como:
$oldldpath = getenv(''LD_LIBRARY_PATH'');
putenv("LD_LIBRARY_PATH=");
shell_exec(''/usr/bin/git pull 2>&1'');
putenv("LD_LIBRARY_PATH=$oldldpath");