如何检测PEAR包是否安装在PHP脚本中?
问题描述:
我试图编写一些代码来跟踪依赖关系。有没有一种方法来编程检测PEAR包是否已安装?我想是这样的:如何检测PEAR包是否安装在PHP脚本中?
if ($some_pear_api->isPackageInstalled('FooPack')) {
echo 'FooPack is installed!';
} else {
echo 'FooPack is not installed. :(';
}
我知道你可以简单地检测,如果该包中的类文件存在,但我主要是想知道是否有安装了PEAR,因为有时一些图书馆提供包括其他方式的代码(例如PHPUnit有一个pear通道以及一个git回购)。
感谢您的帮助!
答
您需要使用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的版本。
答
您可以使用Pear/Info
小号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";
}
?>
答
为什么不包括包,看看是否存在类?
// 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();
我曾尝试使用PEAR_Registry,但我还是有点担心,我可能不正确,因为它需要一些参数实例吧: 功能PEAR_Registry($ pear_install_dir = PEAR_INSTALL_DIR,$ pear_channel =假,$ pecl_channel =假) 我还没有做过关于这方面的任何广泛的研究,但我假设$ pear_install_dir可以在某些安装中设置,特别是对于自定义pear软件包。我可能错了。但无论如何,这对我来说是最接近解决方案的。谢谢! – asartalo 2010-12-22 13:20:00
我也应该注意到我在我的MAMP安装中遇到了一些实例化问题,用于Mac OS X.当我在Ubuntu中完成时,它工作得很好。 – asartalo 2010-12-22 13:24:38