【问题标题】:PHP oci_connect() is working on terminal/Centos server but not on browserPHP oci_connect() 在终端/Centos 服务器上工作,但不在浏览器上
【发布时间】:2022-02-01 12:18:30
【问题描述】:

我从浏览器尝试时遇到错误。

警告:oci_connect(): ORA-28759: 无法打开文件 /var/www/myapp/abc.php 第 16 行

致命错误:ORA-28759:无法在 /var/www/myapp/abc.php 中打开文件 第 19 行

但是当从服务器终端以 root 用户> PHP abc.php 运行相同的文件时,Oracle 数据库输出即将到来。

我不明白为什么从终端运行而不是在浏览器上运行。

我正在使用 PHP7、Apache 和已安装的 Oracle 19c 主数据库。

我正在使用 oci_connect 从 PHP 代码与 oracle 数据库进行通信。


我认为我的 httpd (apahce) 存在一些权限问题。

请提出建议。

【问题讨论】:

  • 因此,当您运行 CLI 时,它可以工作,而当您通过浏览器运行时,它不会。在我看来,您为 CLI 和 Web 服务器配置了不同的 php.ini 文件!
  • 1.从 CLI 执行 >php --ini 并查看 Loaded Configuration File: 然后 2. 编写 <?php phpinfo(); ?> 脚本并运行该脚本并再次在该输出中查找 Loaded Configuration File

标签: php oracle apache


【解决方案1】:
  • 检查 Web 服务器进程是否有权访问所有 Oracle 客户端库和数据文件。由于您使用的是 Oracle 主目录,因此请确保所有目录都设置了“其他”访问权限。通常用户主目录默认没有这个。

  • 由于应用程序正在运行,正在加载一些库,所以权限是否正常?确保 Web 服务器进程环境变量与命令 shell 使用的相同,以确保使用相同的 Oracle 客户端库集。 (您是否还在某个地方或另一个 Oracle 主页上安装了 Instant Client??)。

  • “ORA-28759:无法打开文件”的最近常见原因是正在使用 Oracle 云钱包并且钱包的 sqlnet.ora 路径(DIRECTORY=... 位)无效。​检查路径是否正常,或者 Oracle Net 配置文件在默认位置(并且可读)。请注意,使用 Instant Client 19.14,您可以使用单向 TLS,因此并不总是需要钱包,具体取决于您的网络配置。

  • 我怀疑 php.ini 有问题,因为您显然可以调用 OCI8 函数。 php.ini 文件不控制引发错误的 Oracle 客户端库的行为。

更新您的问题,详细了解如何设置环境以及用于连接的 Oracle 配置文件

【讨论】:

  • 感谢@christopher-jones 的支持。我设置了 ENV 变量,并在 httpd 文件中设置了 ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH、NLS_LANG、TNS_ADMIN 。你能建议我一些命令吗?所以我可以为你提供输出。我对 CentOS Linux 不熟悉。
猜你喜欢
  • 1970-01-01
  • 2019-08-26
  • 2014-06-27
  • 2018-08-02
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多