2012-02-09 78 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

相關問題