如何使用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.
现在,当我们将项目移交给艺术家时,他们只需要进行一次修改就可以了。

