当前位置: 首页 > 知识库问答 >
问题:

Oracle 11g PHP oci_connect失败OCIEnvNlsCreate()

陈泰宁
2023-03-14

问题:LinuxCentOS/Oracle11g/InstantClient/PHP5.3。3.

oci_connect()失败。有什么问题与您的系统请检查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();

我尝试了从谷歌搜索中发现的所有技巧,但都没有奏效<感谢您的帮助。

共有3个答案

钱志
2023-03-14

您需要将即时客户端的所有内容复制到apache/bin

我使用xampp并为我工作。

将即时客户端的所有文件复制到apache/bin

阙弘博
2023-03-14

我自己也处理过同样的问题,我找到了解决办法。

我的解决方案是:

  1. 错误:错误:oci_connect():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将被授权连接数据库

马德宇
2023-03-14

获取OCIEnvNlsCreate()失败?欢迎来到地狱。。。

我知道线已经旧了,但问题仍然存在。通常,这个问题的答案会重定向到第三方站点,通常是404。

让我们从问题开始。错误本身是相当普遍的。它的留档总结为“lib崩溃了...不知道为什么”。有广泛的解决方案,包括但不限于配置、重新安装和祈祷“在这里插入随机神名”。

以下是最常见解决方案的简短列表:

1.把变量放在你的表中。php文件。

    putenv("LD_LIBRARY_PATH=$newld");

where $newld is the link to your library.

2.删除变量LD_LIBRARY_PATH(如果存在)(是的,如1所示),从php文件中删除,并将其放入apache2中。conf或httpd。conf或/etc/environment或您的发行版/版本为环境变量提供的任何文件。一个简单的指南可以在这里或互联网上的任何地方找到。为什么?

不要在PHP脚本中使用putenv()设置Oracle环境变量,因为在脚本运行之前可能会加载和初始化Oracle库。使用putenv()设置的变量可能会导致冲突、崩溃或不可预测的行为。有些函数可以工作,但有些函数可能会出现细微的错误。应在启动web服务器之前设置变量。

如安装文档中所述。之后还要重新启动apache。它基于发行版/版本,但最有可能的命令是service httpd restart

重新安装oci8。需要多少次就有多少次。不要勉强。强迫只会让事情变得更糟。另外,试着编译它(也就是下载软件包,使用/configure-“您需要使用的所有花式命令”,然后进行安装)。

确保你得到了正确的LD_LIBRARY_PATH。说起来很有趣,对吧?您可能没有注意到,oracle在N个不同的位置创建了包含或多或少相同文件的文件夹Client/lib/,它们之间的唯一区别是,选择这些文件夹中的所有文件夹(除了一个)将导致上述错误。健全检查?

重新安装php/apache。很可能是您的旧安装导致了问题。因此,使用apt get purge php*yum remove php*或任何对您的发行版执行相同操作的方法都将是一个良好的开端。

PHP升级后编辑问题再次出现,这次采用了不同的解决方案。

编辑SYSCONFIG编辑文件 /etc/sysconfig/httpd.在末尾加上这两行:

导出LD_LIBRARY_PATH=/PATH/to。lib export ORACLE_HOME=/path/to/HOME

放弃并阅读手册,可以在这里找到。

如果这些都没有帮助,请随意浏览悲伤之墙,寻找解决方案。。。

 类似资料:
  • 我尝试运行这个gradle任务(通过gradlew) 它使用cucmber jvm 并收到此错误 当我从cmd中的同一路径运行同一行时: 更新1: 这个cmd在shell控制台中工作: ./构建/发行版/WebLarge测试/bin/WebLargeTests-f html:构建/报告/cucumber/-f json:构建/报告/cucumber/report.json--胶水com.waze.

  • 在两台不同的笔记本电脑上使用maven构建相同的项目。一个是运行良好,一个是显示错误。 状态:两个系统的配置相同。 使用的命令:mvn clean install-DskipTests=true 错误: 我什至尝试删除所有内容,例如再次创建. m2文件夹。

  • 问题内容: 我的程序使用该类(系统偏好设置,而不是用户)将加密的产品密钥数据保存到计算机。问题是,在Windows和Linux上(尚未在OSX上进行测试,但可能是相同的),如果我不使用具有管理员权限的程序运行该程序,则在尝试读取或读取该程序时,它将发出异常或警告。保存数据。 显然,要求用户以“管理员”权限运行程序是不切实际的。理想情况下,我希望操作系统请求用户许可。 这很愚蠢,并且消除了的一半目的

  • 问题内容: 当我使用getFromLocationName调用时,我得到一个IOException,描述为“ grpc failed”。 运行的代码 错误的控制台输出: Android SDK版本(API级别):25 Android Studio插件是最新的。 提前致谢! 编辑: 问题现在似乎已经解决,这是我的解决方案。 问题答案: 更新: 该问题现在似乎已解决。我不确定问题是否就此解决了,因此,

  • 我写了一个方便的屏幕键盘模块,当我在电脑上编写打算以平板模式运行的程序时,我可以导入和使用它。因为我想在未来的许多程序中导入和使用这个实用程序,我想存储当前鼠标位置和在模块开始时鼠标可见性状态,然后在模块退出时恢复那些条件。mouse.get_pos()命令工作正常,但是.mouse.get_visible()命令失败,返回错误消息:AtiniteError:模块'pygame.mouse'没有属

  • 我正在尝试构建我的Android应用程序与Gradle在控制台。但关于任务“:app:TransformClasseSandResourcesWithProGuardForRelease”的获取以下错误: ./gradlew构建--堆栈跟踪 这是我收到的例外情况:

  • “:App:TransformClassesWithDexForDebug”。>com.android.build.transform.api.transformException:当我在studio项目中添加Facebook最新SDK时 Android Studio TransformException:错误:任务“:app:TransformClassesWithDexForDebug”执行失