Oracle 11g PHP oci连接失败OCIEnvNlsCreate()

mhd8tkvw  于 2023-03-07  发布在  PHP
关注(0)|答案(7)|浏览(282)

问题:Linux操作系统中心/Oracle 11 g/即时客户端/PHP 5.3.3
错误:oci_connect():OCIEnvNlsCreate()失败。您的系统出现问题-请检查是否设置了ORACLE_HOME和LD_LIBRARY_PATH并指向正确的目录
phpinfo()相关部分:

如您所见,环境变量设置正确,我可以在页面上使用getenv()回显它们。我还检查了读取权限,我可以从网页读取这些目录中的所有文件。客户端库文件在那里(我安装并重新安装了两次)完全安装。库是可读和可加载的。
ldd没有显示任何错误。
下面是来自php文件的调用:

$test = getenv('LD_LIBRARY_PATH')."  ".getenv('ORACLE_HOME');
$this->dbconn = oci_connect("myuser","mypassword", "localhost/orcl") or die("<b>Connection Failed: $test </b>").oci_error();

我试了所有的技巧,我发现从谷歌,没有工作。
任何帮助都很感激。

cyej8jka

cyej8jka1#

OCIEnvNlsCreate()失败了吗?欢迎来到地狱...
我知道这个线程很旧,但问题仍然存在。而且通常这个问题的答案会重定向到第三方网站,通常是404 s。
让我们从这个问题开始。这个错误本身是相当普遍的。它的文档总结为“lib崩溃了...不知道为什么”。有一个广泛的解决方案,包括但不限于配置,重新安装和祈祷“在这里插入随机的神名”。
以下是最常见解决方案的简短列表:

1.将变量放入.php文件中。

putenv("LD_LIBRARY_PATH=$newld");

其中$newld是指向库的链接。

2.从php文件中删除变量LD_LIBRARY_PATH,如果存在的话(是的,就像1.中显示的那样),并把它放到apache2.conf或httpd.conf或/etc/environment或你的发行版/版本中的任何环境变量文件中。在这里或互联网上的任何地方都可以找到一个简单的指南。为什么?

不要在PHP脚本中使用putenv()设置Oracle环境变量,因为Oracle库可能会在脚本运行之前加载和初始化。使用putenv()设置的变量可能会导致冲突、崩溃或不可预测的行为。有些函数可能会工作,但有些函数可能会给予细微的错误。应在启动Web服务器之前设置变量。
如安装文档中所述。然后重新启动apache。它基于发行版/版本,但最有可能的命令是service httpd restart
1.重新安装oci 8。尽可能多地重新安装。不要强制安装。强制安装只会让情况变得更糟。另外,尝试编译它(也就是使用./configure -'all the fancy commands you'll need to use'make install下载包)。
1.确保你得到了正确的LD_LIBRARY_PATH。有趣的是,你可能没有注意到oracle在N个不同的位置创建了文件夹client/lib/,其中包含了或多或少相同的文件,它们之间的唯一区别是选择所有这些文件夹中的一个将导致上述错误。健全性检查?
1.重新安装php/apache。很可能是你的旧版本导致了这个问题。所以使用apt-get purge php*或者yum remove php*或者其他任何可以对你的发行版起到同样作用的东西,将是一个好的开始。

EDITPHP升级后问题再次出现,这次使用了不同的解决方案。

1.编辑SYSCONFIG编辑文件/etc/sysconfig/httpd。在末尾添加以下两行:
导出LD_LIBRARY_PATH=/路径/到.lib导出ORACLE_HOME=/路径/到/home
1.给予并阅读手册可以在here中找到。
如果这些都没有帮助,请随时浏览wall of sorrow,寻找解决方案...

7d7tgy0s

7d7tgy0s2#

我自己也处理过同样的问题,我找到了解决办法。
我的解决方案是:
1.错误:错误:oci_连接():OCIEnvNlsCreate()失败
授予对客户端目录和文件的权限:

sudo chmod -R 777 /usr/lib/oracle/11.2/client64

以及

sudo chmod -R 777 /usr/include/oracle/11.2/client64

2.我后来得到的错误:ORA-12546:TNS:权限被拒绝

setsebool -P httpd_can_network_connect 1

Apache将被授权连接数据库。

iklwldmw

iklwldmw3#

您需要将即时客户端的所有内容复制到apache/bin
我使用xampp和为我工作。
复制即时客户端enter image description here的所有文件到apache/bin

inn6fuwd

inn6fuwd4#

除了Ubuntu系统之外,我自己也处理过类似的问题。我们通过直接在/etc/environment中设置环境变量,而不在apache配置中设置它们来解决这个问题。只需在环境文件的底部添加变量,它们就可以在系统范围内应用。

imzjd6km

imzjd6km5#

在apache init脚本上添加你的自定义环境变量。我使用centos,因此,init脚本位于/etc/init.d/httpd
只需将oracle用户.bash_profile复制粘贴到/etc/init.d/httpd
这是我的。

ORACLE_HOSTNAME=ora11g.home.com; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=ora11g; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH

希望这能有所帮助

jmo0nnb3

jmo0nnb36#

我刚刚解决了这个相同的问题:

  • Apache
  • 中央操作系统7
  • PHP 5语言
  • Oracle 12cR1

这条消息说:
请检查是否设置了ORACLE_HOME和LD_LIBRARY_PATH并指向正确的目录
在Apache中,有一个文件,您可以在其中设置环境变量:/etc/sysconfig/httpd。必须有一个nginx的配置文件。
我添加了所需的环境变量。

  • ORACLE主目录是*/oracle/产品/12.1.0/数据库主目录_1 *
  • Oracle客户端安装在*/oracle/产品/12.1.0/客户端 * 下

增加:

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

希望能有所帮助!

6qfn3psc

6qfn3psc7#

我对这个php_warning的解决方案如下:
在httpd配置中添加了以下行,警告消失。

# cat /etc/sysconfig/httpd  |grep -v "#"
LANG=C
ORACLE_HOME=/oracle/product/19
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

错误为:[2020年12月2日星期三10:06:27.291278][:错误][pid 1744][客户端127.0.0.1:39610] PHP警告:oci_连接():OCIEnvNlsCreate()失败。您的系统有问题-请检查ORACLE_HOME和LD_LIBRARY_PATH是否已设置,并在第57行指向/var/www/html/websrv/ws_reg.php中的正确目录[Wed Dec 02 10:06:27.291401 2020][:error][pid 1744][client 127.0.0.1:39610] PHP警告:oci_连接():尝试检索/var/www/html/websrv/ws_reg. php中第57行\n错误ORA-01804的文本时出错[2020年12月2日星期三10:06:27.291531][:错误][pid 1744][客户端127.0.0.1:39610] PHP警告:oci_close()期望参数1是资源,布尔值在/var/www/html/websrv/ws_reg.php的第588行给出

相关问题