php-oci8 - libclntsh.so.18.1: не удается открыть общий объектный файл - PullRequest
0 голосов
/ 16 апреля 2019

В RHEL 6 я установил PHP 7.2 через репозиторий remi:

# 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: не удается открыть файл общего объекта: такого файла или каталога нет))в Unknown в строке 0

Похоже, php не может найти библиотеку libclntsh.so.18.1 из клиента Oracle.Поэтому я решил проверить домашнюю библиотеку оракула, чтобы посмотреть:

# 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.Не знаю, как это решить.

1 Ответ

0 голосов
/ 16 апреля 2019

Чтобы решить эту проблему, необходимо скачать 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
...