2010-12-22 8 views
4

私は依存関係を追跡するためにいくつかのコードを書こうとしています。 PEARパッケージがインストールされているかどうかをプログラムで検出する方法はありますか?時々、いくつかのライブラリが自分を含めた他の手段を提供するので、私はそのパッケージのクラスファイルが存在する場合は、単純に検出することができます知っているが、私はほとんどPEARがインストールされていることを持っているかどうかを知りたいPEARパッケージがPHPスクリプトにインストールされているかどうかを検出するには?

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

:私のようなものを考えていますコード(例えば、PHPUnitにはpearチャネルとgit repoがあります)。

ありがとうございました!

答えて

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 = falseの場合、$ pecl_channel = false) 私はこれについて広範な研究をしていないが、私は$ pear_install_dirが特にカスタム梨パッケージのインストールのどこかに設定できると仮定している。私は間違っているかもしれません。しかし、とにかく、これは本当に私のためのソリューションに最も近いです。ありがとう! – asartalo

+0

私はMac OS X用のMAMPインストールでいくつかのインスタンス化の問題に遭遇したことにも注意してください。私がUbuntuで行ったとき、うまくいきました。 – asartalo

+0

リンクはハエのように死んでいます。要約がうまくいきました。 – clorz

0

あなたはPear/InfopackageInstalledがこれを答えるために使用することができます。

<?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

しかし、これにはオプションのパッケージが必要です。 –

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(); 
関連する問題