【问题标题】:Cannot connect to Oracle (oci8) with Apache (FPM). PHP 7.x CLI is OK无法使用 Apache (FPM) 连接到 Oracle (oci8)。 PHP 7.x CLI 没问题
【发布时间】:2018-11-30 22:19:00
【问题描述】:

我制作了一个连接到 Oracle(oci8 扩展)的 PHP 脚本。当我使用 CLI 模式运行它时效果很好 (# php test-oracle.php)

但是在浏览器中打开的相同脚本(Apache + PHP 7.x FPM)不起作用,我收到了这个错误:

oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries

我阅读并关注了我在论坛(也在 stackoverflow 中)找到的许多内容,但对 apache 没有任何作用。

Ubuntu 16.04 LTS / Apache 2.4.33 / PHP 7.1.18

谢谢!

【问题讨论】:

  • 您是否检查了您的 Apache/PHP 的 LD_LIBRARY_PATH 是否如错误提示的那样正确?
  • @gvenzl 是的,我尝试在很多地方添加但没有成功,/etc/ld.so.conf.d/oracle.conf,/etc/environment,/etc/apache2/envvars 以及/etc/php/7.1/fpm/php.ini。我在浏览器中仍然有同样的错误。我使用安装在 /opt/oracle_instantclient 中的 oracle instantclient。这是我用于 LD_LIBRARY_PATH 的路径。不明白为什么不起作用..
  • 看看phpinfo();是否真的为您的PHP进程设置了LD_LIBRARY_PATH。也看看stackoverflow.com/questions/16345515/…community.oracle.com/thread/4081480
  • 当您将其添加到/etc/ld.so.conf.d/oracle.conf 时,您是否运行了ldconfig? /opt/oracle_instantclient 是否可以被 Apache 进程读取?

标签: php oracle apache oci8


【解决方案1】:

我找到了解决方案,所以回答我自己。

我的 Oracle Instant Client 版本有点太旧 (11.2.x),我更新到新版本 (12.1.x) 并按照我的案例的标准指南(见下文)。现在它可以与 apache 一起使用。

https://gist.github.com/hewerthomn/81eea2935051eb2500941a9309bca703

所以我猜是这个库有一些权限问题或类似的问题。

再次感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2018-08-16
    • 2019-04-09
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多