【发布时间】:2010-09-11 19:19:12
【问题描述】:
如果机器安装了oracle(oci8 and/or pdo_oci),如何使用php检测?
我正在开发一个PHP 项目,其中一些开发人员(例如我自己)已经安装了它,但他们几乎不需要安装它。如何编写一个快速函数以在代码中使用,以便我的用户能够在网站外观上工作而不会崩溃?
【问题讨论】:
如果机器安装了oracle(oci8 and/or pdo_oci),如何使用php检测?
我正在开发一个PHP 项目,其中一些开发人员(例如我自己)已经安装了它,但他们几乎不需要安装它。如何编写一个快速函数以在代码中使用,以便我的用户能够在网站外观上工作而不会崩溃?
【问题讨论】:
如果未安装 oci 扩展,那么您将在 farside.myopenid.com 的回答中遇到致命错误,您可以使用 function_exists('oci_connect') 或 extension_loaded('oci8') (或任何实际的扩展叫)
【讨论】:
这里的人有一些解决方案,但让我们将它们全部整合到一个解决方案中。
对于 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.
现在,当您将项目交给美工人员时,他们只需进行一次修改即可。
【讨论】:
我不知道我是否完全理解你的问题,但一个简单的方法是这样做:
<?php
$connection = oci_connect('username', 'password', 'table');
if (!$connection) {
// no OCI connection.
}
?>
【讨论】:
正如 Greg 上面提到的,您可以通过编程方式使用 function_exists() 方法。不要忘记,您还可以使用以下内容查看 PHP 安装的所有环境细节:
<?php
phpinfo();
?>
【讨论】: