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