02 Сентября 2016 15:12
Итак, у нас CentOS (в принципе на других Linux все будет аналогично) на который уже установлен Nginx, PHP, PHP-FPM и Oarcle Client + модуль php_oci8. На всякий случай, в этом можно убедиться командой:
# php -m | grep oci
Если вывод такой же, как в примере ниже, то модуль установлен:
# php -m | grep oci
oci8
Но при попытке использовать oci_connect(...) получаем вот такую ошибку:
Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in /var/www/...
Когда все известные бубны с прописыванием ORACLE_HOME и LD_LIBRARY_PATH во все скрипты запуска и прочие перебраны, но все равно не работает, то простое решение кажется просто невозможным, но оно есть!
Разработчики PHP-FPM позаботились о нас и сделали прекрасный конфиг, которым как раз и надо пользоваться.
Идем в /etc/php-fpm.d/www.conf
(если такого нет то смотрим в /etc/php-fpm.conf
откуда берутся конфиги или работаем непосредственно с ним).
Находим место где написано примерно вот это:
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
И ниже дописываем, естественно заменяя пути из примера ниже на свои:
env[ORACLE_HOME] = /u01/app/oracle/product/12.1.02/db_1
env[LD_LIBRARY_PATH] = $ORACLE_HOME/lib:$LD_LIBRARY_PATH
env[TNS_ADMIN] = /u01/app/oracle/product/12.1.02/db_1/network/admin/
env[PATH] = $PATH:$HOME/bin:$ORACLE_HOME/bin
Теперь перезапускаем PHP-FPM:
service php-fpm restart
И наступает долгожданное чудо - успешный коннект к Oracle.