Saat menginstal mysqlnd ekstensi PHP, dan ketika configure skrip dijalankan, saya menemukan kesalahan – Tidak dapat menemukan OpenSSL
Di bawah ini adalah pesan kesalahan lengkapnya:
[root@terra-node-01 mysqlnd]# ./configure [...] checking for X509_free in -lcrypto... yes checking for pkg-config... /bin/pkg-config configure: error: Cannot find OpenSSL's <evp.h>Open OpenSSL
Solusi:Tidak dapat menemukan OpenSSL
Langkah1:Telusuri evp.h
[root@terra-node-01 mysqlnd]# locate evp.h /opt/at12.0/include/openssl/evp.h /opt/at12.0/share/doc/openssl/html/man7/evp.html /usr/include/openssl/evp.h
Langkah 2:Setel variabel lingkungan PHP_OPENSSL_DIR
Skrip konfigurasi memerlukan bantuan untuk mencari tahu di mana mencarinya. Mari kita lihat bagaimana skrip konfigurasi mencoba mencari file tersebut. Buka file konfigurasi dengan bantuan editor favorit Anda dan arahkan ke blok yang ditunjukkan di bawah ini:
[root@terra-node-01 mysqlnd]# vim configure
[...]
for i in $PHP_OPENSSL_DIR; do
if test -r $i/include/openssl/evp.h; then
OPENSSL_INCDIR=$i/include
fi
if test -r $i/$PHP_LIBDIR/libssl.a -o -r $i/$PHP_LIBDIR/libssl.$SHLIB_SUFFIX_NAME; then
OPENSSL_LIBDIR=$i/$PHP_LIBDIR
fi
test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break
done
if test -z "$OPENSSL_INCDIR"; then
as_fn_error $? "Cannot find OpenSSL's <evp.h>" "$LINENO" 5
fi
if test -z "$OPENSSL_LIBDIR"; then
as_fn_error $? "Cannot find OpenSSL's libraries" "$LINENO" 5
fi
old_CPPFLAGS=$CPPFLAGS
CPPFLAGS=-I$OPENSSL_INCDIR
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version" >&5
$as_echo_n "checking for OpenSSL version... " >&6; }
[...]
Jika Anda mengamati kode di atas, konfigurasikan menggunakan variabel seperti PHP_OPENSSL_DIR untuk mencari evp.h . Jika Anda menggemakan PHP_OPENSSL_DIR variabel, Anda akan melihat bahwa itu tidak mengandung /usr, dimana evp.h hadir dan harus dilihat. Jadi solusinya adalah dengan mendefinisikan variabel ini sebagai variabel lingkungan, mengekspornya, dan menjalankan konfigurasi lagi.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR [root@terra-node-01 mysqlnd]# ./configure [...] checking for X509_free in -lcrypto... yes checking for pkg-config... /bin/pkg-config configure: error: Cannot find OpenSSL's libraries
Oh! tidak ada lagi evp.h kesalahan tetapi menemukan kesalahan lain:Tidak dapat menemukan perpustakaan OpenSSL. Dengan menggunakan teknik yang sama seperti di atas, mari cari tahu jalur untuk library OpenSSL.
Langkah 3:Temukan jalur perpustakaan OpenSSL
[root@terra-node-01 mysqlnd]# locate libssl.so locate libssl.so /opt/at12.0/lib64/libssl.so /opt/at12.0/lib64/libssl.so.1.1 /opt/at12.0/lib64/power8/libssl.so /opt/at12.0/lib64/power8/libssl.so.1.1 /opt/at12.0/lib64/power9/libssl.so /opt/at12.0/lib64/power9/libssl.so.1.1 /usr/lib64/.libssl.so.1.0.2k.hmac /usr/lib64/.libssl.so.10.hmac /usr/lib64/libssl.so /usr/lib64/libssl.so.1.0.2k /usr/lib64/libssl.so.10
Langkah 3:Tambahkan jalur perpustakaan OpenSSL ke PHP_OPENSSL_DIR
Tambahkan jalur lib OpenSSL /usr/lib64 ke PHP_OPENSSL_DIR variabel lingkungan.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Sayangnya, itu saja tidak menyelesaikan masalah. Setelah menganalisis kode konfigurasi, ternyata kita perlu mengatur variabel lingkungan lain yang disebut PHP_LIBDIR . Tetapi variabel ini tidak dibaca dari lingkungan, tetapi oleh argumen seperti yang terlihat dari cuplikan kode konfigurasi di bawah ini:
[root@terra-node-01 mysqlnd]# vim configure
[...]
# Check whether --with-libdir was given.
if test "${with_libdir+set}" = set; then :
withval=$with_libdir; PHP_LIBDIR=$withval
Jadi tambahkan argumen baru --with-libdir="" saat menjalankan konfigurasi
[root@terra-node-01 mysqlnd]# ./configure --with-libdir="" [...] creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
Skrip konfigurasi sekarang berhasil diselesaikan, lanjutkan dengan make dan make install .