使用oracle在mac os x上使用tns配置php

时间:2011-06-02 15:17:39

标签: php oracle macos

我是php的新手,但我已经在我的Mac上运行(php 5.3.3)(OS 10.6)。但是,当我尝试运行此脚本时:

    <?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的网站并下载了他们的即时客户端,但我对下一步该做什么感到困惑。他们的指示是:<​​/ p>

  

在非Windows平台上重建PHP   使用以下配置   选项:   --with-OCI8 =共享,instantclient,/路径/到/即时/客户端/库   编辑您的php.ini文件并添加:   extension = oci8.so确保你的   extension_dir参数(在php.ini中)   指向oci8.so的位置   安装。设置环境   Oracle要求的变量,例如   PATH(Windows)或LD_LIBRARY_PATH(打开   Linux)重启你的网络服务器。

但是有人可以用更简单的语言向我解释这个问题吗?我真的很困惑。我在即时客户端文件夹中找不到oci8.so文件,我不知道在文件中放置extention = oci8.so(我所有的都是php.ini-production和php.ini-development我不知道如何用配置选项“重建”PHP。

哦,我也不知道如何拉入tnsnames.org文件。这是正确的方法吗?由于我还没有连接,我不知道这是否失败。

2 个答案:

答案 0 :(得分:1)

你不想要文件名&#34; tnsnames.ora&#34;在你的oci_connect调用中。您需要tnsnames.ora文件中的数据库连接别名的名称。 tnsnames.ora文件包含已知数据库连接的列表,由别名标识。对于名为&#34; db_alias&#34;的数据库别名,您将使用此调用:

$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))
  )

或者,您可以使用Easy Connect字符串:

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

其中host,port和db_service_name将替换为您环境中的值。所以,对于主持人&#34; foo&#34;与数据库&#34; bar&#34;在标准端口1521上,您的连接将如下所示:

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

有关详细信息,请查看manual page for oci_connect

答案 1 :(得分: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);

对我来说就像是一种魅力。