php-oci8 - libclntsh.so.18.1:无法打开共享对象文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (204)

在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吗?先感谢您。

更新

我已将扩展名添加到php.ini文件中extension=oci8。然后我做了php -m

PHP警告:PHP启动:无法加载动态库'oci8'(试过:/ usr / lib64 / php / modules / oci8(/ usr / lib64 / php / modules / oci8:无法打开共享对象文件:没有这样的文件或目录),/ usr / lib64 / php / modules / oci8.so(libclntsh.so.18.1:无法打开共享对象文件:没有这样的文件或目录))在第0行的Unknown中

看起来php无法libclntsh.so.18.1从Oracle客户端找到库。所以我决定查看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

Finnaly,必须设置LD_LIBRARY_PATHenv变量才能让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

扫码关注云+社区

领取腾讯云代金券