【问题标题】:How can I detect, using php, if the machine has oracle (oci8 and/or pdo_oci) installed?我如何使用 php 检测机器是否安装了 oracle(oci8 和/或 pdo_oci)?
【发布时间】:2010-09-11 19:19:12
【问题描述】:

如果机器安装了oracle(oci8 and/or pdo_oci),如何使用php检测?

我正在开发一个PHP 项目,其中一些开发人员(例如我自己)已经安装了它,但他们几乎不需要安装它。如何编写一个快速函数以在代码中使用,以便我的用户能够在网站外观上工作而不会崩溃?

【问题讨论】:

    标签: php oracle


    【解决方案1】:

    如果未安装 oci 扩展,那么您将在 farside.myopenid.com 的回答中遇到致命错误,您可以使用 function_exists('oci_connect') 或 extension_loaded('oci8') (或任何实际的扩展叫)

    【讨论】:

      【解决方案2】:

      这里的人有一些解决方案,但让我们将它们全部整合到一个解决方案中。

      对于 oracle 函数的单个实例,使用 function_exists() 进行测试就足够了;但如果代码在整个 OCI 调用中散布,那么将每个代码都包含在 function_exists() 测试中将是一件非常痛苦的事情。

      因此,我认为最简单的解决方案是创建一个名为 nodatabase.php 的文件,该文件可能如下所示:

      <?php
      // nodatabase.php
      // explicitly override database functions with empty stubs. Only include this file
      // when you want to run the code without an actual database backend. Any database-
      // related functions used in the codebase must be included below.
      function oci_connect($user, $password, $db = '', $charset='UTF-8', $session_mode=null)
      {
      }
      
      function oci_execute($statement, $mode=0)
      {
      }
      // and so on...
      

      然后,如果在调用数据库代码的位置之前定义了全局(例如 THEME_TESTING),则有条件地包含此文件。这样的包含可能如下所示:

      // define("THEME_TESTING", true) // uncomment this line to disable database usage
      if( defined(THEME_TESTING) )
        include('nodatabase.php'); // override oracle API with stub functions for the artists.
      

      现在,当您将项目交给美工人员时,他们只需进行一次修改即可。

      【讨论】:

      • 如果我能控制所有的代码,那就太理想了。不幸的是,所有直接与 oracle 接口的代码都由我们的客户维护和更新,并且同时使用 oci8 和 pdo_oci。所以,我不确定这个解决方案是否可行——并不是说我不会在星期一尝试。
      • 关键是您必须能够在实际调用实际函数之前加载存根函数。如果是这样,您应该能够使这个概念发挥作用:记录使用了哪些 OCI/PDO 调用,编写一个存根函数库/骨架类,并根据需要有条件地包含该类。
      【解决方案3】:

      我不知道我是否完全理解你的问题,但一个简单的方法是这样做:

      <?php
        $connection = oci_connect('username', 'password', 'table');
        if (!$connection) {
          // no OCI connection.
        }
      ?>
      

      【讨论】:

        【解决方案4】:

        正如 Greg 上面提到的,您可以通过编程方式使用 function_exists() 方法。不要忘记,您还可以使用以下内容查看 PHP 安装的所有环境细节:

        <?php
        phpinfo();
        ?>
        

        【讨论】:

        • 是的……但这只是将细节打印到屏幕上。我想了解具体情况,而不是将内容打印到屏幕上。
        猜你喜欢
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2011-12-06
        • 2012-09-22
        • 2010-11-30
        相关资源
        最近更新 更多