OCIEnvNlsCreate()失败 - 请检查ORACLE_HOME和> LD_LIBRARY_PATH

时间:2017-04-27 07:56:06

标签: php nginx oci

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

我正在尝试通过PHP连接到Oracle数据库。我收到以下错误。

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

警告:oci_connect():OCIEnvNlsCreate()失败。有一些东西   你的系统有问题 - 请检查ORACLE_HOME和   LD_LIBRARY_PATH已设置并指向正确的目录   第26行/var/www/blah.php

     

警告:oci_connect():尝试检索错误的文本时出错   第26行的/var/www/blah.php中的ORA-01804

真正请求变量,它们将为空。此代码返回空字符串。

$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 个答案:

答案 0 :(得分:1)

我通过在 CentOS 6 中的 php-fpm 5.6 文件 /etc/php-fpm.d/www.conf 中删除 ;clean_env=no 行中的分号解决了这个问题。希望它对较新的 PHP 版本有所帮助.修改这个文件后记得重启php-fpm服务。

答案 1 :(得分:0)

我们没有相同的基础设施,但我刚刚解决了同样的问题:

  • 的Apache
  • 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

我希望它有所帮助!

答案 2 :(得分:0)

这与不正确的NLS_LANG参数有关。在我的情况下,它设置为“ NA”。解决方法是:

Windows-必须在Windows注册表中未设置NLS_LANG(最好重命名)。在\ HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE中的注册表中查找NLS_LANG子项,然后重命名。

Linux / UNIX-在这里,您只需发出Linux命令“ unset NLS_LANG”