【问题标题】:How do I connect PHP 7.x to Oracle database on RedHat / CentOS?如何将 PHP 7.x 连接到 RedHat / CentOS 上的 Oracle 数据库?
【发布时间】:2023-03-23 05:45:01
【问题描述】:

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

我已成功安装 oci8 扩展,但无法识别 oci_connect 功能。

请帮忙。

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

【问题讨论】:

    标签: php oracle redhat oci8


    【解决方案1】:

    针对 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";
    

    【讨论】:

      【解决方案2】:

      经过一个多星期的努力才弄清楚这一点,这里总结了最终奏效的方法。我希望这对其他人有帮助。

      这些说明适用于 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 即时客户端 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 步: oracle 文件已经创建在 /usr/lib/oracle/18.3 我们现在需要创建一个符号链接,以便在服务器运行时包含 oracle 文件:

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

      第五步:重启服务器

       $ 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);
      

      如果您收到系统错误,则说明安装失败。

      【讨论】:

      • 请注意,即将推出的版本将使用 Oracle Client 19.3。 “rpm -qi php-oci8”提供了这些信息。
      猜你喜欢
      • 2014-01-25
      • 2021-01-03
      • 2020-11-02
      • 2019-07-03
      • 2015-03-01
      • 2020-09-20
      • 1970-01-01
      • 2016-08-25
      • 2020-08-05
      相关资源
      最近更新 更多