2012-10-01 20 views
2

工作我寫了一個PHP腳本作爲cron作業運行,並且它沒有運行。該腳本在瀏覽器中工作得很好,但我發現,當我從我得到這個錯誤在命令行中運行它:oci_connect命令行失敗,但在瀏覽器

Warning: oci_connect(): ORA-12154: TNS:could not resolve the connect identifier specified in /usr/apps/webdata/cron/PropogateDB.php on line 190 

有問題的線路是:

$conn_NRB = oci_connect($user, $pass, "nrb.njbbnrbpd1"); 

正如我所說的這個腳本在瀏覽器中正常工作。

我做了一些挖了一圈,發現數據庫的配置設置。那麼我想這:

$conn_NRB = oci_connect($user, $pass, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=nrb)))"); 

有了這個代碼,這兩個命令行和瀏覽器給我這個錯誤:

Warning: oci_connect() [function.oci-connect]: ORA-01017: invalid username/password; logon denied in /usr/apps/webdata/cron/PropogateDB.php on line 191 

據我所知,沒有其他的用戶名,我也可以使用密碼。 (我試圖現在驗證)

我在這個網站上搜索了周圍,發現了一個類似問題的人,儘管他的問題被顛倒了,他的原因是命令行和瀏覽器指向了兩個不同的php.ini文件。我剛剛確認瀏覽器和命令行都調用了相同的php.ini文件。它們都指向:

Configuration File (php.ini) Path => /usr/local/php/lib 

是否有其他的原因,一個腳本會在瀏覽器中工作,但在命令行中失敗?我對Oracle SQL相對比較陌生,並且我沒有直接訪問數據庫的權限,所以我不知道該從哪裏下載。

謝謝。

回答

0

在 '的EasyConnect' 字符串

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=nrb))) 

指到本地主機。 '在瀏覽器中'可能意味着:服務器上的(執行PHP腳本)。

除非您在相同服務器的命令行上運行測試,否則應該更改連接字符串以引用數據庫服務器(可能僅僅是Web服務器的主機名)。

提防可能到來的方式防火牆的限制。如果可能,請使用公司的tnsnames.ora將數據庫實例標識符解析爲其連接字符串。

+0

命令行和瀏覽器都連接到同一臺機器。 我試圖改變「localhost」改成「nrb.njbbnrbpd1」,這是無法解決的連接。 (有可能是一個不同的名字,我有使用。我不知道。) – user1672174

+0

@ user1672174的一點是,瀏覽器不執行PHP。服務器確實(查看地址欄)。這可能不會是同一臺機器 – sehe

+0

我很確定它是同一臺機器。瀏覽器中腳本的地址是http://nrbdev/cron/PropogateDB.php。當我通過PuTTY連接時,我在主機名字段中輸入「nrbdev」。然後,我可以通過命令行導航到/ usr/apps/webdata/cron,執行目錄列表,並查看列出的PropogateDB.php。除非我錯過了它是同一臺機器。但是,這確實給了我一個想法。如果數據庫位於不同的機器上,localhost會失敗,對吧?如果情況如此,它是否仍然可以通過瀏覽器使用上面的代碼工作? – user1672174

相關問題