我正在尝试编写一些代码来跟踪依赖项。有没有办法以编程方式检测是否已安装PEAR包?我想的是:
if ($some_pear_api->isPackageInstalled('FooPack')) {
echo 'FooPack is installed!';
} else {
echo 'FooPack is not installed. :(';
}
我知道您可以简单地检测该包的类文件是否存在,但我主要想知道PEAR是否已安装,因为有时一些库提供了包含其代码的其他方法(例如,PHPUnit具有梨通道以及一个git repo。)。
感谢您的帮助!
答案 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();