0

我正在尝试通过 PHP 从网络中的另一台计算机连接到 Ubuntu 13 服务器上的 Oracle 11gR2 Xe。我正在使用来自 oci_connect的安装和示例,如下所示:

<?php
query_cities();
function query_cities() {
if {
$c = oci_connect("hr", "hr", "localhost:1521/XE");
;
} else {
echo "No connection"; } 
?>

或另一个例子,如:

$c = oci_connect("hr", "hr", "192.168.1.33:1521/XE");

我已经通过 SqlPlus 在 DB 中启用了远程连接

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

我已经解锁了用户 HR

SQL> ALTER USER hr ACCOUNT UNLOCK;

但我只能在 SQL Developer 的网络上通过 IPv6 找到一些连接,例如 netstat:

tcp6 0 0 192.168.1.33:1521 192.168.1.2:57563 已建立 14843/oracleXE

tcp6 0 0 192.168.1.33:1521 192.168.1.2:59314 已建立 15665/oracleXE

不是来自我的浏览器,它们不在 tcp IPv4 上。浏览器窗口保持白色.. 无反应、无响应且无错误消息。这应该是由于 TNSLR IP 仅在 IPv6 上处于活动状态,还是没有 oci_connect 公式足够好,或者我缺少其他一些?

我将不胜感激有关此问题的任何帮助

4

1 回答 1

0

好吧,根据收到的在日志中查找错误的建议,我发现了消息“*您的系统有问题 - 请检查 ORACLE_HOME 和 LD_LIBRARY_PATH 是否已设置并指向正确的目录*”,我决定在st-curriculum.oracle的模型之后,通过安装 Oracle InstantClient 并重新安装 OCI8 包的复杂过程- 进行非常小的修改,如下所示:

  1. Oracle 11g R2 XE 数据库和 Apache2/PHP 服务器已预先安装在 Ubuntu 13.10 服务器和系统上(带有 prereqiuzite、交换文件、内核参数、内存泄漏错误恢复、库和 chkconfig 模拟器),如许多帖子中所述。

  2. 我停止了 apache2 服务器

     service apache2 stop
    

    并在 st-curriculum.oracle.com 中启动 DRCP 连接池

  3. 我创建了一个名为 PHPHOL 的用户(如果在 oracle 安装中尚未完成,则替代安装 Oracle 的示例 HR 模式)

  4. 接下来,我从 OTN 下载了 Basic 和 SDK Instant Client 软件包:oracle.com/technetwork/database/features/instant-client/index-100365.html 并将这些软件包解压缩到 $ORACLE_HOME (/u01/app/oracle/product /11.2.0/xe)

  5. 然后我从 pecl.php.net/package/oci8 下载了 OCI8 包并作为 Instantclient 安装在 /opt/oci8

    phpise
    ./configure --with-oci8=instantclient,/u01/app/oracle/product/11.2.0/xe/instantclient_11_2
    make / make install
    
  6. 我在oracle technote中设置了 oracle 环境路径

    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe        
    LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/instantclient_11_2
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH=/opt/oci8/modules
    
    nano /etc/ld.so.conf.d/oracle.conf
    

    并插入:/u01/app/oracle/product/11.2.0/xe/instantclient_11_2

    nano /etc/ld.so.conf.d/oci8.conf
    

    并插入:/opt/oci8/modules

    nano /etc/ld.so.conf.d/shared.conf
    

    并插入已安装的共享扩展位置:/usr/lib/php5/20121212

    ldconfig
    
  7. 接下来我编辑配置文件 php.ini 添加:extension=oci8.so,设置 date.timezone 指令并添加 OCI8 1.4 扩展类:oci8.connection_class = MYPHPAPP(对于 st-curriculum.oracle.com 示例,见上面的链接)

  8. 我创建了链接:$ORACLE_HOME/instantclient_11_2/libclntsh.so.11.1。指向 $ORACLE_HOME/instantclient_11_2/libclntsh.so

  9. 在 Ubuntu 13.10 服务器上重启 Oracle 数据库和 Apache 服务

    /etc/init.d/oracle-xe force-reload
    service apache2 start
    
  10. 我在 phpinfo() 中验证了 oci8 已启用,并且我将 connect.php 文件设置为:

    $conn = oci_connect("hr", "hr", "localhost/xe");
    

或者像来自 st-curriculum.oracle.com 的例子。

从同一网络上的另一台计算机上,我通过浏览器连接到 Ubuntu 服务器上的 oracle 数据库,我得到了

连接到甲骨文!

我希望这有帮助

于 2013-07-29T19:46:30.647 回答