【问题标题】:Check whether FirePHP is installed in PHP code检查 PHP 代码中是否安装了 FirePHP
【发布时间】:2012-08-23 11:48:39
【问题描述】:

有什么方法可以确定服务器上是否安装了 FirePHP(通过 PEAR)?我想让登录 FirePHP 成为可能,但也不要让没有该工具的每个人的代码崩溃。

这个例子,我想它应该如何工作:

$message = "hello";
function log($message) {
    if (library_exists('FirePHPCore/fb.php')) {
        require_once('FirePHPCore/fb.php');
        ob_start();
        \FB::log($message);
    } else {
        SomeBoringLogger::log($message);
    }
}

我没有找到类似我的 library_exists 方法的东西。 PHP中有类似的东西吗?

【问题讨论】:

  • 任何 php 库不应安装在系统共享目录中。您可以将目录与您的项目一起复制,并从您具有写入权限的 any 目录中包含它。
  • is_file('FirePHPCore/fb.php')?
  • @Rocket: is_file 不尊重包含路径
  • 搜索包含路径。这可能会有所帮助:stackoverflow.com/questions/6041250/…
  • 另外 - 这也不是一个好主意。如果您不检查 firephp 版本 - 这是一个开始使用过时且易受攻击的版本的机会。因此,如果您真的需要它 - 我建议您在发行版中只保留一份副本

标签: php pear libraries firephp


【解决方案1】:
@include_once('FirePHPCore/fb.php'); // Ignore any errors here, as we check for existance
if (class_exists('FirePHP')) { // Do something after this

http://php.net/manual/en/function.class-exists.php

FirePHP uses FirePHP as its class name,所以如果它可用,应该定义那个类


对于 PHP 5.3.2 或更高版本,请使用 zerkms 的建议:

(!stream_resolve_include_path('FirePHPCore/fb.php')===FALSE)

【讨论】:

  • 在此之前添加一个“include_once”。
  • 如果找不到这样的文件会怎样?
  • @zerkms,在前面加上@,PHP 警告将被忽略。不幸的是,由于它不是一个例外,它不能被try/catch 捕获。因为这是include 而不是require,所以脚本不会失败。
  • @Brad:是的,你在我的评论之后添加了@。 PS:有没有可怕的解决方案@ - stackoverflow.com/a/6041325/251311
  • @zerkms,很高兴知道!这是一个更好的解决方案。
【解决方案2】:

使用include_once,所以它不会终止请求。正如@Brad 建议的那样,之后使用class_exists

$message = "hello";

safe_include_once('FirePHPCore/fb.php');
if (class_exists('FB')) {
   function log($message) { 
      //using FirePHP
   }
} else {
   function log($message) {
      SomeBoringLogger::log($message);
   }
}

function safe_include_once($path) {
  if ($path = stream_resolve_include_path($path)) {
    include_once($path);
  }
}

[编辑] 在safe_include_path 中使用stream_resolve_include_path

[Edit2] 更快的运行时日志记录。

【讨论】:

  • 如果找不到文件会有警告
【解决方案3】:

file_exists() 可用于您的情况。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2017-04-13
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2012-06-23
    • 2013-03-23
    • 2010-11-06
    相关资源
    最近更新 更多