安装 OCI8:如何更正 "Use of undefined constant OCI_COMMIT_ON_SUCCESS" 错误?

Installation of OCI8 : how to correct "Use of undefined constant OCI_COMMIT_ON_SUCCESS" error?

我正在尝试在 RedHat 服务器 (RHEL7) 上为我的 Apache 服务器安装 OCI8。 此时,当我尝试使用 Symphony 连接到我的服务器时,出现此错误:

Exception "ErrorException" : Use of undefined constant OCI_COMMIT_ON_SUCCESS - assumed 'OCI_COMMIT_ON_SUCCESS'

这是我安装 OCI8 所做的。

  1. 安装 oracle-instantclient11.2 RPM(开发版和基本版)。
  2. 安装 OCI8 包:

有关信息,我的服务器上已有 Oracle 12C,但我想将我的 PHP 应用程序连接到另一台服务器 (Oracle 11GR2)。

tar zxvf oci8-2.1.7.tgz
cd oci8-2.1.7
phpize
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib --with-php-config=/opt/rh/rh-php56/root/usr/bin/php-config 
make
make install
  1. 编辑 php.ini 以添加 extension=oci8.so

我找到了这个 thread 并尝试使用 oci_connect 但我得到了这个错误:

Fatal error: Call to undefined function oci_connect()

我该如何解决这个问题?


编辑: 我刚刚在 php_error.log:

中发现了这个错误

[26-Sep-2017 16:14:12 Europe/Paris] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/rh/rh-php56/root/usr/lib64/php/modules/oci8.so' - /opt/rh/rh-php56/root/usr/lib64/php/modules/oci8.so: undefined symbol: _emalloc_128 in Unknown on line 0

根据此 thread,PHP 警告是由库冲突引起的。所以,我完全手动卸载 OCI8 并重新安装。但是,这次我没有选择最后一个版本,因为我在 PECL 网站上看到:

Use 'pecl install oci8-2.0.12' to install for PHP 5.2 - PHP 5.6.

另外,因为我的服务器上已经有一个 Oracle 数据库,所以我使用了这些命令来安装扩展:

tar zxvf oci8-2.0.12.tgz
cd oci8-2.0.12
phpize
./configure --with-oci8=shared,$ORACLE_HOME --with-php-config=/opt/rh/rh-php56/root/usr/bin/php-config 
make
make install

现在,我可以在我的 phpinfo 页面中找到 OCI8 扩展。