Ошибка 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() они отображаются.
Я могу записать переменные окружения в каждый файл, но это не вариант.
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
Я надеюсь, что это помогает!