OCI8 работает с командной строкой, но не с Apache

Мой сервер — centos7, мне удалось установить на нем apache, php7.1, oracle-instantclient18.3-basic и oci8. OCI8 теперь работает нормально, когда я запускаю код на CLI, он подключается к базе данных и получает данные, только с одним предупреждением (также появляется при запуске php -v):

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_oci.so' - /usr/lib64/php/modules/pdo_oci.so: undefined symbol: php_pdo_unregister_driver in Unknown on line 0

в отличие от того, когда я открываю страницу через браузер (на клиентском компьютере), я получаю эту ошибку:

Fatal error: Uncaught Error: Call to undefined function oci_connect() in /var/www/html/pcmapi/emp.php:5 Stack trace: #0 {main} thrown in /var/www/html/pcmapi/emp.php on line 5

phpinfo () возвращает:

oci8
OCI8 Support => enabled
OCI8 DTrace Support => enabled
OCI8 Version => 2.1.8
Oracle Run-time Client Library Version => 18.3.0.0.0
Oracle Compile-time Instant Client Version => 18.3

Directive => Local Value => Master Value
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20

На самом деле я не могу понять, что является причиной фатальной ошибки, будь то в конфигурации Apache или OCI, и я нахожу странным, что функции OCI работают нормально на Cli, но не Apache. любая помощь?

0

Решение

Решение состоит в том, чтобы убедиться, что вы загружаете pdo.so перед загрузкой pdo_oci.so,

Я не знаю точную конфигурацию, которую вы используете, но на Ubuntu, например, у меня есть pdo_mysql.so загрузка после pdo.so имея эти файлы конфигурации в PHP conf.d:

10-pdo.ini:

extension=pdo.so

20-PDO-mysql.ini:

extension=pdo_mysql.so

Обратите внимание, что файл 10-pdo.ini будет загружаться раньше, чем 20-pdo-mysql.ini просто из-за его имени файла.

Удачи.

0

Другие решения

Общая проблема заключается в том, что Apache не имеет клиентских библиотек Oracle (например, Instant Client) в своем пути поиска библиотек. Причина, по которой PHP работает в командной строке, заключается в том, что ваша оболочка делает правильно задать путь поиска в библиотеке.

Если у вас нет других библиотек Oracle на этом компьютере, выполните:

  sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"sudo ldconfig

Если у вас есть другое программное обеспечение, которое может конфликтовать, то сделайте что-то вроде редактирования /etc/sysconfig/httpd и добавить:

LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib

В зависимости от вашей версии Apache, то, как вы устанавливаете среду, меняется (ууу!)

Вы можете или не должны экспортировать это:

export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib

В других системах вы можете использовать файл Apaches envvars.

0

Спасибо за ваше время, я на самом деле переустановил всю среду снова, это было болезненно, так как это рабочий сервер, но окупился.
пока у меня был mysql & InstantClient уже настроен, я удалил php & Затем httpd переустановите их все следующим образом:

yum install httpd php php-mysql php-devel php-oci8 php-pear mod_ssl

а потом:

service httpd restart

сейчас это работает.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector