如何在RedHat / CentOS上将PHP 7.x连接到Oracle数据库?

时间:2019-06-16 21:05:01

标签: php oracle redhat oci8

我正在努力将PHP应用程序连接到Oracle数据库。在过去的一周中,我尝试了多种选择,但均未成功。

我设法安装了oci8扩展名,但是未识别到oci_connect函数。

请协助。

RedHat Enterprise Linux 7.6
PHP:7.3
甲骨文:12c

2 个答案:

答案 0 :(得分:3)

经过一个多星期的努力来解决这个问题,这里总结了最终的工作。我希望这对其他人有帮助。

这些说明适用于RedHat / CentOS Linux安装。我的经验是,关于RedHat / CentOS的说明与其他Linux安装略有不同。避免使用Oracle指导...他们根本没有帮助!

第一步: 我按照这个出色的网站上的说明安装了PHP 7.3和其他Remi rpm软件包:https://tecadmin.net/install-php7-on-centos7/

步骤2:然后,我使用Remi存储库(请参阅步骤1)安装oci8扩展:

$ sudo yum --enablerepo=remi-php73 install php-oci8

步骤3:现在,我们需要安装oracle Instant Client 18.3软件包。在以下网站上对此进行了很好的解释:https://qiita.com/tkprof/items/2a4eb868f45fb5759110

$ cd /etc/yum.repos.d
$ sudo wget http://yum.oracle.com/public-yum-ol7.repo
$ sudo wget http://yum.oracle.com/RPM-GPG-KEY-oracle-ol7
$ sudo rpm --import RPM-GPG-KEY-oracle-ol7
$ sudo yum-config-manager --enable ol7_oracle_instantclient
$ sudo yum install oracle-instantclient18.3-basic
$ sudo yum install oracle-instantclient18.3-devel
$ sudo yum install oracle-instantclient18.3-jdbc
$ sudo yum install oracle-instantclient18.3-sqlplus
$ sudo yum list oracle-instantclient*

第4步: 已在/usr/lib/oracle/18.3中创建了oracle文件,我们现在需要创建一个符号链接,以便在服务器运行时包括oracle文件:

$ sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
$ sudo ldconfig

第5步:重新启动服务器

 $ sudo systemctl stop httpd
 $ sudo systemctl start httpd

步骤6:现在,我们可以创建一个简单的php文件来测试与Oracle的连接:

<?php     
$conn = oci_connect("username", "password", "//url/SID");

if (!$conn) {
    echo "oci8 working! However the following errors occurred: <br>";
    $m = oci_error();
    echo $m['message'], "\n";
    exit;
} else {
    print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);

如果出现系统错误,则说明安装无效。

答案 1 :(得分:0)

针对PHP-OCI8的最新Oracle Instant Client版本19.3的更新:

>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-jdbc-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

>> sudo yum localinstall oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-jdbc-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

// create symbolic link
eu-onesead-d001 ~]# sudo sh -c "echo /usr/lib/oracle/19.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
eu-onesead-d001 ~]# sudo ldconfig

重新启动服务器

要测试连接,我创建了一个php文件,将该文件上传到服务器并通过浏览器进行测试。注意:显然,您应该谨慎使用并在测试后删除文件:

<?php
echo "Ensure you have restarted the server if you have installed any new extensions!";
echo "<br>Attempting Oracle db connection...";

// this will open the oracle extension and execute a connection
try {
$conn = oci_connect(
    "username_goes_here",
    "password_goes_here",
    "//oracle_server_address_goes_here/sid_goes_here");

echo "<br>OCI Connect extension found.. opening connnection...";

if (!$conn) {
    echo "<br>Function 'oci_connect' found and working but cannot connect to Oracle: <br>";
    $m = oci_error();
    echo $m['message'], "\n";
    exit;
} else {
    echo "<br>SUCCESS: Connected to Oracle!";
}
} catch (Exception $e) {
    echo $e->getMessage();
}

// Close the Oracle connection
oci_close($conn);
echo "<br>Connection closed";
echo "<br>For security, please delete this file off the server";