2011-06-02 81 views
2

我是新來的php,但我已經在我的mac(OS 10.6)上運行(php 5.3.3)。然而,當我嘗試運行此腳本:在mac os上配置php使用oracle usin tns x

<?php // Create connection to Oracle 
$conn = oci_connect("user", "pass", "tnsnames.ora"); 
if (!$conn) { 
    $m = oci_error(); 
    echo $m['message'], "\n"; 
    exit; 
} 
else { 
    print "Connected to Oracle!"; 
} 
// Close the Oracle connection 
oci_close($conn); 
?> 

我得到的錯誤:「致命錯誤:調用未定義的函數oci_connect()......」

現在,我已經檢查Oracle的網站並下載他們的即時客戶端,但我堅持下一步該做什麼。他們的指示是:

On non-Windows platforms rebuild PHP using the following configuration option: --with-oci8=shared,instantclient,/path/to/instant/client/libs Edit your php.ini file and add: extension = oci8.so Ensure that your extension_dir parameter (in php.ini) points to the location where oci8.so was installed. Set environment variables required by Oracle, such as PATH (Windows) or LD_LIBRARY_PATH (on Linux) Restart you webserver.

但是有人可以用簡單的語言向我解釋嗎?我很困惑。我無法在即時客戶端文件夾中找到oci8.so文件,並且我不知道將extention = oci8.so放在文件的哪個位置(我所有的都是php.ini-production和php.ini-development 。我不知道如何使用配置選項「重建」PHP。

哦,我也不知道如何拉入tnsnames.org文件。這是正確的方法嗎?因爲我甚至沒有有一個連接,但我不知道這是否失敗

回答

1

你不想在你的oci_connect調用中的文件名「tnsnames.ora」你想要在數據庫連接別名tnsnames.ora文件。tnsnames.ora文件包含已知數據庫連接條目的列表,由別名標識。對於名爲「db_alias」的數據庫別名」,你可以使用這個調用:

$conn = oci_connect("user", "pass", "db_alias"); 

一個典型的tnsnames.ora的條目將是這個樣子:

DB_NAME = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = foo.bar.com)(PORT = 1521)) 
    (CONNECT_DATA = (SERVICE = some_db_service_name)) 
) 

或者,你可以使用一個簡單的連接字符串:

$conn = oci_connect("user", "pass", "//host:port/db_service_name"); 

其中host,port和db_service_name將由您的環境中的值替換。所以,對於主機「富」與標準的1521端口上的數據庫「酒吧」,你的連接應該是這樣的:

$conn = oci_connect("user", "pass", "//foo:1521/bar"); 

看一看的manual page for oci_connect以獲取更多信息。

+0

感謝您的回覆。我實際上只是使用tnsnames.ora文件作爲字符串,但我不知道是否因爲「調用未定義函數oci_connect()」錯誤而工作。所以我需要在測試之前先配置php。 – solerous 2011-06-02 16:53:13

+0

查看http://forums.oracle.com/forums/thread.jspa?threadID=406036&start=15&tstart=0並通過codrai查找帖子。由codrai發佈的 – DCookie 2011-06-02 17:22:13

+1

適用於Windows,我正在使用mac。 – solerous 2011-06-02 17:56:15

0

我一個完整的連接字符串做:

$rnum=rand(0,99999999); 
$connect_str = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = $dbserver) (PORT = $dbport) (HASH = '.$rnum.')) (CONNECT_DATA =(SID = $dbname)))"; 
$DB = oci_connect($dbuser, $dbpass, $connect_str); 

作品對我來說就像魅力。