【发布时间】:2016-12-04 08:05:36
【问题描述】:
我的配置:
PHP
PHP 5.4.16
OCI8
启用 OCI8 支持 OCI8 DTrace 支持已禁用 OCI8 版本 2.0.11
环境
朗C
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/instantclient
NOTIFY_SOCKET /run/systemd/notify
ORACLE_HOME /opt/instantclient
LD_LIBRARY_PATH /opt/instantclient
TNS_ADMIN /opt/instantclient/network/admin
XERCES_DISABLE_DTD 1
防火墙
禁用
问题
当我使用 ocilogon 执行 php 页面时:
ocilogon(): ORA-12170: TNS: 发生连接超时
但是如果我尝试 telnet xxxx 1521 我可以连接到 Db
我的php代码:
$test1 = "(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = yyy))
)";
$conn=ocilogon(USERNAME,PASSWORD,$test1) or die ("logon problem");
我尝试使用 oci_connect,结果相同。
【问题讨论】:
-
检查 SQL*Plus 是否可以连接。您的错误指向网络配置问题,可能是入站或出站防火墙。
-
一些一般的 FYI cmets:(i) 因为您使用的是 Instant Client,所以不需要设置 ORACLE_HOME (ii) 您在 PHP 中使用过时的函数名称。新的就像 oci_connect() (iii) 你可以使用“easy connect”语法来代替旧的、完整的 TNS 字符串。新语法类似于
$test = "xxxxxx/yyy"。查看 Oracle 关于 PHP OCI8 的免费书籍:oracle.com/technetwork/topics/php/… -
你的评论克里斯托弗。正如我之前所说,我尝试使用 oci_connect,结果相同。
-
和 firewalld 或 selinux 被禁用。如果我尝试 telnet xxxx 1521 我没有任何问题,我登录到 oracle db