【问题标题】:configuring php with oracle usin tns on mac os x在 mac os x 上使用 tns 使用 oracle 配置 php
【发布时间】:2011-06-02 15:17:38
【问题描述】:

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

    <?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 的网站并下载了他们的即时客户端,但我不知道下一步该做什么。他们的指示是:

在非 Windows 平台上重建 PHP 使用以下配置 选项: --with-oci8=shared,instantclient,/path/to/instant/client/libs 编辑您的 php.ini 文件并添加: extension = oci8.so 确保您的 extension_dir 参数(在 php.ini 中) 指向 oci8.so 所在的位置 已安装。设置环境 Oracle 所需的变量,例如 PATH (Windows) 或 LD_LIBRARY_PATH (on Linux) 重启你的网络服务器。

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

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

【问题讨论】:

    标签: php oracle macos


    【解决方案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))
      )
    

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

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

    其中主机、端口和 db_service_name 将被您环境中的值替换。因此,对于标准端口 1521 上带有数据库“bar”的主机“foo”,您的连接将如下所示:

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

    查看manual page for oci_connect 了解更多信息。

    【讨论】:

    • 感谢您的回复。我实际上尝试只使用 tnsnames.ora 文件作为字符串,但由于“调用未定义函数 oci_connect()”错误,我无法判断这是否有效。所以在测试之前我需要先配置php。
    • 查看forums.oracle.com/forums/… 并查找 codrai 的帖子。
    • codrai 的帖子适用于 Windows,我使用的是 mac。
    【解决方案2】:

    我使用完整的连接字符串:

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

    对我来说就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多