通过PHP连接到Ubuntu 13服务器上的Oracle 11gR2 XE

时间:2013-07-18 18:51:45

标签: php oracle ipv6 ubuntu-server

我正在尝试通过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;

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

tcp6 0 0 192.168.1.33:1521 192.168.1.2:57563 ESTABLISHED 14843 / oracleXE

tcp6 0 0 192.168.1.33:1521 192.168.1.2:59314 ESTABLISHED 15665 / oracleXE

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

我很感激在这个问题上的任何帮助

1 个答案:

答案 0 :(得分:0)

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

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

  2. 我停止了apache2服务器

     service apache2 stop
    

    并启动DRCP连接池,如st-curriculum.oracle.com

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

  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环境路径设置为oracle technote

    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-courses .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");
    
  11. 或者喜欢st-curriculum.oracle.com示例中的那个。

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

    连接到Oracle!

    我希望这个帮助