我正在尝试设置本地开发框。盒子在 Linux Mint 上。安装 apache、php 和 mysql 没有任何问题,然后我继续安装 Oracle Xpress 版本作为我最新项目的需要。
oci8.so
通过pecl获得并修改php.ini
。
问题是,每次我重新启动并尝试使用oci_connect()
调用连接到 oracle 时,它都会给我这个错误:
oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME is set and points to the right directory
我已经检查了ORACLE_HOME
错误出现的时间,它似乎包含正确的值。
现在,我可以通过转到终端来解决这个问题
$ su
$ apache2ctl stop
$ apache2ctl start
这是修复它的唯一方法(即 not sudo apache2ctl restart
、 not sudo apache2ctl {stop,start}
、 not su
apache2ctl restart
)。
我知道这是一个小问题,我可能会忍受它。但是,如果有人可以指出我的工作,我将非常感激。
听起来启动 Apache 的 init 脚本没有设置正确的环境变量(该脚本可能位于
/etc/init.d
. 当您手动重新启动它时它会起作用,因为您的shell 已ORACLE_HOME
正确设置,它会传递给 Apache。解决方法是修改Oracle的系统启动脚本设置
ORACLE_HOME
环境变量。它甚至可以通过某种方式自动设置外部变量(在 Red Hat 风格的系统上,大多数 init 脚本的源文件都在/etc/sysconfig
.并且更新初始化脚本,您的更改不会被吹走)。另一种选择是
ORACLE_HOME
在 apachehttpd.conf
或使用它的虚拟主机中设置。添加:
到
httpd.conf
(或在虚拟主机配置文件中/etc/apache2/hosts-enabled/...
)这样做的好处是不需要弄乱系统脚本。
我已经看到它是由 SELinux 引起的。我不得不暂时禁用 SELinux 来安装 Oracle 驱动程序,然后当我重新启动时,没有加载 Oracle 驱动程序。Apache 日志表明这一点:
根据这个有用的页面,您可以告诉 SELinux 允许 Oracle 驱动程序:
您还可以采取更激进的步骤,完全禁用 SELinux。在 /etc/selinux/config 中,将“SELINUX=enforcing”更改为“SELINUX=disabled”