2010-12-22 102 views
4

我试图编写一些代码来跟踪依赖关系。有没有一种方法来编程检测PEAR包是否已安装?我想是这样的:如何检测PEAR包是否安装在PHP脚本中?

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

我知道你可以简单地检测,如果该包中的类文件存在,但我主要是想知道是否有安装了PEAR,因为有时一些图书馆提供包括其他方式的代码(例如PHPUnit有一个pear通道以及一个git回购)。

感谢您的帮助!

回答

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的版本。

+0

我曾尝试使用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

+0

我也应该注意到我在我的MAMP安装中遇到了一些实例化问题,用于Mac OS X.当我在Ubuntu中完成时,它工作得很好。 – asartalo 2010-12-22 13:24:38

0

您可以使用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"; 
    } 
?> 
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();