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()中会显示它们。
我可以为每个文件编写环境变量,但这不是一个选项。
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");
我该怎么办?
答案 0 :(得分:1)
我通过在 CentOS 6 中的 php-fpm 5.6 文件 /etc/php-fpm.d/www.conf 中删除 ;clean_env=no 行中的分号解决了这个问题。希望它对较新的 PHP 版本有所帮助.修改这个文件后记得重启php-fpm服务。
答案 1 :(得分:0)
我们没有相同的基础设施,但我刚刚解决了同样的问题:
消息说:
请检查是否已设置ORACLE_HOME和LD_LIBRARY_PATH并指向正确的目录
在apache中,有一个文件可以设置环境变量:
/etc/sysconfig/httpd
。必须有一个nginx的配置文件。
我添加了必需的环境变量。 假设
添加:
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”