繁体   English   中英

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

[英]How can I detect, using php, if the machine has oracle (oci8 and/or pdo_oci) installed?

如果机器安装了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();
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM