如何检测PHP脚本中是否安装了PEAR包?

时间:2010-12-22 04:41:06

标签: php pear

我正在尝试编写一些代码来跟踪依赖项。有没有办法以编程方式检测是否已安装PEAR包?我想的是:

if ($some_pear_api->isPackageInstalled('FooPack')) {
    echo 'FooPack is installed!';
} else {
    echo 'FooPack is not installed. :(';
}

我知道您可以简单地检测该包的类文件是否存在,但我主要想知道PEAR是否已安装,因为有时一些库提供了包含其代码的其他方法(例如,PHPUnit具有梨通道以及一个git repo。)。

感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

您需要使用PEAR_Registry类来执行此操作(这是PEAR脚本本身使用的)。 从3年前开始阅读Adam Harvey的博客文章“pear -> list” - 您需要的所有细节/示例都在那里。

include 'PEAR/Registry.php';

$reg = new PEAR_Registry;
foreach ($reg->listPackages() as $package) {
    print "$package\n";
}

如果您需要这个来检查每个软件包的特定版本,那么您可以基于以下示例,我在对该博客条目的评论中提供了这些示例:

<?php                           
require 'PEAR/Registry.php';
$reg = new PEAR_Registry;                 
define("NAME", 0);         
define("VERSION", 1);
$packages = array(
    array("PEAR", "1.6.2"),
    array("Date", "1.4.7"),    
    array("Date_Holidays", "0.17.1"),
    array("Validate_IE", "0.3.1")
);
foreach ($packages as $package) {
    $pkg = $reg->getPackage($package[NAME]);
    $version = $pkg->getVersion();
    echo "{$package[NAME]} – {$package[VERSION]} – ";
    echo version_compare($version, $package[VERSION], '>=') ? 'OK': 'BAD', "\n";
}
?>

如果您需要复制并粘贴此内容,则最好使用https://gist.github.com/kenguest/1671361处的版本。

答案 1 :(得分:0)

您可以使用Pear/Info s packageInstalled来回答这个问题:

<?php
  require_once 'PEAR/Info.php';
  $res = PEAR_Info::packageInstalled('FooPack');
  if ($res) {
     print "Package FooPack is installed \n";
  } else {
     print "Package FooPack is not yet installed \n";
  }
?>

答案 2 :(得分:0)

为什么不包括包并查看该类是否存在?

// Supress Errors. Checking is done below.
@require_once 'PHP/UML.php';

if(!class_exists('PHP_UML'))
{
    throw new Exception('PHP_UML is not installed. Please call `pear install PHP_UML` from the command line',1);
}

// Code to use PHP_UML below...
$uml = new PHP_UML();