如何使用php检测机器是否安装了oracle(oci8和/或者pdo_oci)?

时间:2020-03-06 14:30:38  来源:igfitidea点击:

如何使用php检测机器上是否安装了oracle(oci8和/或者pdo_oci)

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

解决方案

我不知道我是否完全理解问题,但是一种简单的方法是:

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

如果未安装oci扩展名,那么farside.myopenid.com的答案将出现致命错误,我们可以使用function_exists('oci_connect')或者extension_loaded('oci8')(或者该扩展名实际使用的任何名称)

如Greg上文所述,可以通过编程方式使用function_exists()方法。别忘了,我们还可以使用以下内容使用以下命令查看PHP安装的所有环境详细信息:

<?php
phpinfo();
?>

这里的人们有很多解决方案,但让我们将其全部整合为一个解决方案。

对于一个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.

现在,当我们将项目移交给艺术家时,他们只需要进行一次修改就可以了。