2012-02-09 46 views
2

这是一个现在让我的单元格惊人的问题。PHP无法连接,但SqlPlus可以

有一个我想连接的oracle服务器。我可以使用sqlplus命令行轻松连接到它。

当我尝试用PHP连接到oracle数据库时,它失败。这里有一个问题,我们在另一个数据中心有相同的设置;一台PHP机器试图连接到一个oracle数据库。我运行完全相同的代码,在两台PHP机器上以相同方式配置php。

PHP1可以通过sqlplus和php连接到Oracle1。

PHP2通过sqlplus与Oracle2连接,但不通过PHP连接。

有防火墙和一些端口阻塞正在进行。我目前的解释是,端口php2用于连接到oracle2不是默认的1521,它被阻止。

的ORA错误我得到的是:

ORA-06413:连接未打开。

任何想法?

+1

你知道端口不是1521吗 - 你能看到SQL * Plus正在使用的连接细节,例如:在你的'tnsnames.ora'中如果你使用别名?如果一个客户端可以连接而另一个客户端不能连接,那么这似乎不太可能是网络或防火墙问题。我假设两个连接都是从同一台客户机尝试的,是这样吗? – 2012-02-09 22:16:39

+0

如果你已经在两台机器上以相同的方式配置php,为什么其中一台机器使用不同的端口连接?如果是这样,我会说你没有对它们进行完全相同的配置...... – Svish 2012-02-10 09:39:11

回答

1

该错误表明由于某种原因,TNS连接描述符无法解析。当Oracle尝试构建连接信息时,通常由Oracle进行系统调用时出现问题。

程序名称,用户名或机器名称中是否有括号?

您是否在64位Windows操作系统上运行32位Oracle客户端?

尝试从命令行使用tnsping实用程序。这是什么告诉你的?

+0

PHP的路径是C:\ Program Files(x86)\ PHP。我所要做的就是把它放在没有括号的路径上。 (C:\ PHP) – 2012-02-11 02:20:45

0

从信息提供,我最好的猜测(它缩小到编程的原因)是,无论是从出现问题的机器发送的数据库名称,用户名或密码包含转义序列($\t\a\r等)当你的PHP脚本以字符串文字输入时,就会被改变。

+0

我原本以为这样,但PHP2和PHP1上的连接字符串都是相同的。这意味着它们都是用以下格式'10.10.10.10:1521/databaseName' – 2012-02-09 18:40:22

+0

写的那么,如果没有转义序列并且代码在其他方面是相同的,那么它可能是网络/配置问题。这可能必须迁移到serverfault。 – webbiedave 2012-02-09 19:07:40

+0

谢谢webbiedave。也许主持人会为我做这件事。 – 2012-02-09 19:18:34

相关问题