【问题标题】:PHP can't connect, but SqlPlus canPHP无法连接,但SqlPlus可以
【发布时间】:2012-02-10 17:10:06
【问题描述】:

这是一个让我的细胞感到困惑的问题。

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

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

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

PHP2 使用 sqlplus 连接到 Oracle2,但不使用 PHP。

有防火墙和一些端口阻塞。我目前的解释是php2用来连接oracle2的端口不是默认的1521,它被阻塞了。

我得到的 ora 错误是:

ORA-06413:连接未打开。

有什么想法吗?

【问题讨论】:

  • 你知道端口不是 1521 - 你能看到 SQL*Plus 使用的连接细节吗,例如如果您使用别名,在您的tnsnames.ora 中?如果一个客户端可以连接而另一个客户端不能连接,这似乎不太可能是网络或防火墙问题。我假设这两个连接都是从同一台客户端机器上尝试的,这是真的吗?
  • 如果您在两台机器上都配置了相同的 php,为什么其中一台使用不同的端口连接?如果是这样,我会说你没有对它们进行相同的配置......

标签: php oracle sqlplus


【解决方案1】:

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

您的程序名、用户名或机器名中有括号吗?

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

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

【讨论】:

  • PHP 位于路径 C:\Program Files (x86)\PHP 中。我所要做的就是把它放在一个没有括号的路径中。 (C:\PHP)
【解决方案2】:

根据提供的信息,我最好的猜测(将其缩小到编程原因)是问题机器发送的数据库名称、用户名或密码包含转义序列($\t\a\r 等),当在 PHP 脚本中作为字符串文字键入时,它会被更改。

【讨论】:

  • 我本来也是这么想的,但是PHP2和PHP1上的连接字符串是一样的。这意味着它们都以以下格式编写 '10.10.10.10:1521/databaseName'
  • 好吧,如果没有转义序列并且代码相同,则可能是网络/配置问题。这可能必须迁移到 serverfault。
  • 感谢 webbiedave。也许版主会为我这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多