php-oci8 - libclntsh.so.18.1: 无法打开共享对象文件
php-oci8 - libclntsh.so.18.1: cannot open shared object file
在 RHEL 6 中,我通过 remi 存储库安装了 PHP 7.2:
# yum --enablerepo=remi-php72 install php
检查预装了哪些模块 php -m
。它没有列出。所以我继续安装它:
# yum --enablerepo=remi-php72 php72-php-oci8
Installed:
php72-php-oci8.x86_64 0:7.2.17-1.el6.remi
Complete!
再次检查模块,oci8 尚未加载。为了测试我尝试使用 mbstring
(默认情况下未安装)的所有模块是否失败:
# yum --enablerepo=remi-php72 install php-mbstring
Installed:
php-mbstring.x86_64 0:7.2.17-1.el6.remi
Complete!
如果我这样做php -m
mbstring 成功地列在那里。我是否遗漏了 oci8
的内容?提前谢谢你。
更新
我已使用 extension=oci8
将扩展名添加到 php.ini 文件中。然后我做了 php -m
:
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8' (tried: /usr/lib64/php/modules/oci8 (/usr/lib64/php/modules/oci8: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/oci8.so (libclntsh.so.18.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
看起来 php 无法从 Oracle 客户端找到 libclntsh.so.18.1
库。所以我决定检查 oracle 的 home lib 看看:
# ls -l libclntsh*
lrwxrwxrwx. 1 oracle oinstall 61 Mar 26 16:20 libclntsh.so -> /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1
lrwxrwxrwx. 1 oracle oinstall 56 Mar 26 16:19 libclntsh.so.10.1 -> /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so
-rwxr-xr-x. 1 oracle oinstall 47251283 Mar 26 16:20 libclntsh.so.11.1
我在想的是 oci8 扩展试图为 18c oracle 版本加载这个库,而我当前的客户端是 11g。不知道如何解决。
要解决这个问题,需要在这里下载Oracle Client 18.5.0 Base - Linux x86-64
:
https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
以 oracle
用户身份解压源:
$ cd /u01/app/oracle/product/
$ mkdir 18.5.0
$ cd 18.5.0
$ wget -c https://download.oracle.com/otn/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip?AuthParam=1555443721_28dfadc632483f950d87ee5f54810e06 -O instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
$ unzip instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
执行 ls
您可以确认图书馆就在那里:
$ ls -l instantclient_18_5/
total 227712
-rwxr-xr-x. 1 oracle oinstall 42360 Feb 26 20:04 adrci
-r-xr-xr-x. 1 oracle oinstall 5780 Feb 26 20:04 BASIC_LICENSE
-rw-r--r--. 1 oracle oinstall 1632 Feb 26 20:04 BASIC_README
-rwxr-xr-x. 1 oracle oinstall 66672 Feb 26 20:04 genezi
-rwxrwxr-x. 1 oracle oinstall 8357160 Feb 26 20:04 libclntshcore.so.18.1
lrwxrwxrwx. 1 oracle oinstall 17 Apr 16 20:42 libclntsh.so -> libclntsh.so.18.1
-rwxrwxr-x. 1 oracle oinstall 78200832 Feb 26 20:04 libclntsh.so.18.1
-r-xr-xr-x. 1 oracle oinstall 3551217 Feb 26 20:04 libipc1.so
-r-xr-xr-x. 1 oracle oinstall 467932 Feb 26 20:04 libmql1.so
-r-xr-xr-x. 1 oracle oinstall 6636088 Feb 26 20:04 libnnz18.so
lrwxrwxrwx. 1 oracle oinstall 15 Apr 16 20:42 libocci.so -> libocci.so.18.1
-r-xr-xr-x. 1 oracle oinstall 2282891 Feb 26 20:04 libocci.so.18.1
-rwxr-xr-x. 1 oracle oinstall 126959616 Feb 26 20:04 libociei.so
-r-xr-xr-x. 1 oracle oinstall 160875 Feb 26 20:04 libocijdbc18.so
-r-xr-xr-x. 1 oracle oinstall 394835 Feb 26 20:04 libons.so
-r-xr-xr-x. 1 oracle oinstall 117635 Feb 26 20:04 liboramysql18.so
drwxr-xr-x. 3 oracle oinstall 4096 Feb 26 20:04 network
-r--r--r--. 1 oracle oinstall 4161744 Feb 26 20:04 ojdbc8.jar
-r--r--r--. 1 oracle oinstall 1398331 Feb 26 20:04 ucp.jar
-rwxr-xr-x. 1 oracle oinstall 242008 Feb 26 20:04 uidrvci
-rw-r--r--. 1 oracle oinstall 74263 Feb 26 20:04 xstreams.jar
最后,必须设置 LD_LIBRARY_PATH
env 变量,以便 PHP 在哪里可以找到库:
$ export LD_LIBRARY_PATH=/u01/app/oracle/product/18.5.0/instantclient_18_5
现在,您可以检查 oci8
是否正确列出:
$ php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
oci8
在 RHEL 6 中,我通过 remi 存储库安装了 PHP 7.2:
# yum --enablerepo=remi-php72 install php
检查预装了哪些模块 php -m
。它没有列出。所以我继续安装它:
# yum --enablerepo=remi-php72 php72-php-oci8
Installed:
php72-php-oci8.x86_64 0:7.2.17-1.el6.remi
Complete!
再次检查模块,oci8 尚未加载。为了测试我尝试使用 mbstring
(默认情况下未安装)的所有模块是否失败:
# yum --enablerepo=remi-php72 install php-mbstring
Installed:
php-mbstring.x86_64 0:7.2.17-1.el6.remi
Complete!
如果我这样做php -m
mbstring 成功地列在那里。我是否遗漏了 oci8
的内容?提前谢谢你。
更新
我已使用 extension=oci8
将扩展名添加到 php.ini 文件中。然后我做了 php -m
:
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8' (tried: /usr/lib64/php/modules/oci8 (/usr/lib64/php/modules/oci8: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/oci8.so (libclntsh.so.18.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
看起来 php 无法从 Oracle 客户端找到 libclntsh.so.18.1
库。所以我决定检查 oracle 的 home lib 看看:
# ls -l libclntsh*
lrwxrwxrwx. 1 oracle oinstall 61 Mar 26 16:20 libclntsh.so -> /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1
lrwxrwxrwx. 1 oracle oinstall 56 Mar 26 16:19 libclntsh.so.10.1 -> /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so
-rwxr-xr-x. 1 oracle oinstall 47251283 Mar 26 16:20 libclntsh.so.11.1
我在想的是 oci8 扩展试图为 18c oracle 版本加载这个库,而我当前的客户端是 11g。不知道如何解决。
要解决这个问题,需要在这里下载Oracle Client 18.5.0 Base - Linux x86-64
:
https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
以 oracle
用户身份解压源:
$ cd /u01/app/oracle/product/
$ mkdir 18.5.0
$ cd 18.5.0
$ wget -c https://download.oracle.com/otn/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip?AuthParam=1555443721_28dfadc632483f950d87ee5f54810e06 -O instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
$ unzip instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
执行 ls
您可以确认图书馆就在那里:
$ ls -l instantclient_18_5/
total 227712
-rwxr-xr-x. 1 oracle oinstall 42360 Feb 26 20:04 adrci
-r-xr-xr-x. 1 oracle oinstall 5780 Feb 26 20:04 BASIC_LICENSE
-rw-r--r--. 1 oracle oinstall 1632 Feb 26 20:04 BASIC_README
-rwxr-xr-x. 1 oracle oinstall 66672 Feb 26 20:04 genezi
-rwxrwxr-x. 1 oracle oinstall 8357160 Feb 26 20:04 libclntshcore.so.18.1
lrwxrwxrwx. 1 oracle oinstall 17 Apr 16 20:42 libclntsh.so -> libclntsh.so.18.1
-rwxrwxr-x. 1 oracle oinstall 78200832 Feb 26 20:04 libclntsh.so.18.1
-r-xr-xr-x. 1 oracle oinstall 3551217 Feb 26 20:04 libipc1.so
-r-xr-xr-x. 1 oracle oinstall 467932 Feb 26 20:04 libmql1.so
-r-xr-xr-x. 1 oracle oinstall 6636088 Feb 26 20:04 libnnz18.so
lrwxrwxrwx. 1 oracle oinstall 15 Apr 16 20:42 libocci.so -> libocci.so.18.1
-r-xr-xr-x. 1 oracle oinstall 2282891 Feb 26 20:04 libocci.so.18.1
-rwxr-xr-x. 1 oracle oinstall 126959616 Feb 26 20:04 libociei.so
-r-xr-xr-x. 1 oracle oinstall 160875 Feb 26 20:04 libocijdbc18.so
-r-xr-xr-x. 1 oracle oinstall 394835 Feb 26 20:04 libons.so
-r-xr-xr-x. 1 oracle oinstall 117635 Feb 26 20:04 liboramysql18.so
drwxr-xr-x. 3 oracle oinstall 4096 Feb 26 20:04 network
-r--r--r--. 1 oracle oinstall 4161744 Feb 26 20:04 ojdbc8.jar
-r--r--r--. 1 oracle oinstall 1398331 Feb 26 20:04 ucp.jar
-rwxr-xr-x. 1 oracle oinstall 242008 Feb 26 20:04 uidrvci
-rw-r--r--. 1 oracle oinstall 74263 Feb 26 20:04 xstreams.jar
最后,必须设置 LD_LIBRARY_PATH
env 变量,以便 PHP 在哪里可以找到库:
$ export LD_LIBRARY_PATH=/u01/app/oracle/product/18.5.0/instantclient_18_5
现在,您可以检查 oci8
是否正确列出:
$ php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
oci8