Oracle11g PHP5.2.0-8上的oci_connect不能与Oracle 11g一起使用

Oracle11g PHP5.2.0-8上的oci_connect不能与Oracle 11g一起使用,oracle11g,oracle-call-interface,php-5.2,Oracle11g,Oracle Call Interface,Php 5.2,我使用PHP5.2.0-8+etch16/oci_connect连接到我公司的Oracle数据库,并在我们的网站上显示信息(可通过外部IP访问)。自从我们升级了DB版本(到11g 11.2.0.4.0版),我就不能再连接数据库了 页面保持加载状态(oci\u set\u call\u timeout不起作用),不显示任何内容。我知道代码可以工作,凭证也可以,因为我在另一个页面中使用了相同的代码(仅对内部IP可见),升级后没有任何问题。我正在使用以下代码: $conn = oci_connect(

我使用PHP5.2.0-8+etch16/oci_connect连接到我公司的Oracle数据库,并在我们的网站上显示信息(可通过外部IP访问)。自从我们升级了DB版本(到11g 11.2.0.4.0版),我就不能再连接数据库了

页面保持加载状态(
oci\u set\u call\u timeout
不起作用),不显示任何内容。我知道代码可以工作,凭证也可以,因为我在另一个页面中使用了相同的代码(仅对内部IP可见),升级后没有任何问题。我正在使用以下代码:

$conn = oci_connect('user', 'password', 'server', 'charset');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    echo "Error";
}
else{
    echo "OK";
}
运行phpinfo时,oci部分返回:

oci8
OCI8 Support    enabled
Version     1.4.5
Revision    $Revision: 305257 $
Active Persistent Connections   0
Active Connections  0
Oracle Instant Client Version   11.1
Temporary Lob support   enabled
Collections support     enabled

Directive   Local Value Master Value
oci8.connection_class   no value    no value
oci8.default_prefetch   100 100
oci8.events Off Off
oci8.max_persistent -1  -1
oci8.old_oci_close_semantics    Off Off
oci8.persistent_timeout -1  -1
oci8.ping_interval  60  60
oci8.privileged_connect Off Off
oci8.statement_cache_size   20  20
在只能由内部IP访问的页面中,
oci
的版本是1.4.9,它运行在Windows Server 2003上(我知道它很旧)。外部页面(不起作用的页面)具有
oci
版本的1.4.5,并在Linux jedi ng 2.6.25中运行。我没有访问linux服务器的权限(只能访问存储php/html的文件夹),但我可以使用
shell\u exec()
运行一些东西

这是一个版本问题(我无法再使用旧版本的php/oci连接到Oracle 11g),还是这只是一个连接问题,我可以尝试另一种方法来解决

如果需要,请随时提问

提前感谢。

  • 将此添加到测试脚本的顶部,然后查看是否得到更好的错误消息:

    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 'On');
    
  • 关键是PHP OCI8使用的Oracle库的版本,而不是您连接到的数据库的版本。在某些环境中存在一些重叠,因为可以从数据库软件安装中使用这些库。如果您有远程数据库,那么PHP OCI8可以(应该)使用来自的库(该链接用于64位软件包-如果您运行32位PHP,则使用32位即时客户端)

  • 除非您已经并正在使用Oracle客户端库18c或更高版本,否则,
    oci\u set\u call\u timeout()
    将不可用

  • 如果我没看错你的问题,你在Linux上有问题吗?在这种情况下,请确保为您的Web服务器版本正确设置了LD_LIBRARY_PATH,例如,您可能需要在
    /etc/sysconfig/httpd
    中设置它(我不知道您的Linux风格,因此这可能有所不同)。通常,如即时客户端所示,使用
    ldconfig
    要容易得多