Ошибка OCIEnvNlsCreate() - проверьте, что ORACLE_HOME и> LD_LIBRARY_PATH

Ubuntu 16.10 / nginx / php7.0 / oracle 11 xe

Я пытаюсь подключиться к базе данных Oracle через PHP. И я получаю следующие ошибки.

$conn = oci_connect('login', 'pass', 'localhost/xe');

Предупреждение: oci_connect(): сбой OCIEnvNlsCreate(). Что-то не так с вашей системой - пожалуйста, проверьте, что ORACLE_HOME и LD_LIBRARY_PATH установлены и указывают на правильные каталоги в /var/www/blah.php в строке 26

Предупреждение: oci_connect(): ошибка при попытке получить текст для ошибки ORA-01804 в /var/www/blah.php в строке 26

Действительно запрашивайте переменные, они будут пустыми. Этот код возвращает пустую строку.

$test = getenv('LD_LIBRARY_PATH')."  ".getenv('ORACLE_HOME');
print ("$test");

Но в phpinfo() они отображаются.

http://img.radiokot.ru/files/21274/medium/19bdtra7xs.PNG

Я могу записать переменные окружения в каждый файл, но это не вариант.

putenv("ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe");
putenv("LD_LIBRARY_PATH=-Wl,-rpath,/u01/app/oracle/product/11.2.0/xe/lib -L/u01/app/oracle/product/11.2.0/xe/lib -lclntsh");

Что я могу сделать?

3 ответа

Я решил это, убрав точку с запятой из строки: clean_env=no в файле /etc/php-fpm.d/www.conf в случае php-fpm 5.6 в CentOS 6. Надеюсь, это поможет в новых версиях PHP. Не забудьте перезапустить службу php-fpm после внесения изменений в этот файл.

Это связано с неверным параметром NLS_LANG. В моем случае он был установлен на "NA". Исправление:

Windows - NLS_LANG должен быть отключен в реестре Windows (лучше всего переименовать). Найдите подраздел NLS_LANG в реестре по адресу \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE и переименуйте его.

Linux/UNIX - здесь вы просто вводите команду Linux "unset NLS_LANG"

У нас нет одинаковой инфраструктуры, но я решил эту проблему в:

  • апаш
  • CentOS7
  • PHP 5
  • Oracle 12cR1

В сообщении говорится:

пожалуйста, проверьте, что ORACLE_HOME и LD_LIBRARY_PATH установлены и указывают на правильные каталоги

В apache есть файл, в котором вы можете установить переменную окружения: /etc/sysconfig/httpd, Должен быть файл конфигурации для nginx.

Я добавил необходимые переменные среды. При условии, что

  • ORACLE_HOME - это /oracle/product/12.1.0/dbhome_1
  • Клиент Oracle был установлен в /oracle/product/12.1.0/client

Добавлять:

ORACLE_HOME=/oracle/product/12.1.0/dbhome_1
LD_LIBRARY_PATH=/oracle/product/12.1.0/dbhome_1/lib:/oracle/product/12.1.0/dbhome_1/network/lib:/oracle/product/12.1.0/client/lib

Я также добавил:

TNS_ADMIN=/oracle/product/12.1.0/dbhome_1/network/admin
ORACLE_SID=<your sid>

После обновления /etc/sysconfig/httpd Я только что перезапустил службу Apache httpd, вот и все:

$ sudo systemctl restart httpd

Я надеюсь, что это помогает!

Другие вопросы по тегам