OCI8 работает с командной строкой, но не с Apache - PullRequest
0 голосов
/ 17 декабря 2018

Мой сервер - 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.любая помощь?

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Общая проблема заключается в том, что 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 голосов
/ 20 декабря 2018

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

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

и затем:

service httpd restart

теперь это работает.

0 голосов
/ 18 декабря 2018

Решение состоит в том, чтобы убедиться, что вы загружаете 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 просто из-за его имени.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...