2010-12-22 8 views
4

종속성을 추적하는 코드를 작성하려고합니다. PEAR 패키지가 설치되어 있는지 프로그램 적으로 탐지하는 방법이 있습니까? 내가 좋아하는 뭔가를 생각하고 있어요 : 그 패키지의 클래스 파일이 존재하는지 당신은 단순히 검색 할 수 있습니다 알고PHP 스크립트에 PEAR 패키지가 설치되어 있는지 확인하는 방법은 무엇입니까?

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

,하지만 대부분은 때때로 어떤 라이브러리를 포함하여 다른 수단을 제공하기 때문에 PEAR가 설치되어 있는지 알고 싶어 자신의 코드 (예 : PHPUnit에는 pit 채널과 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 = 거짓, $ pecl_channel = false) 나는 이것에 대해 광범위한 연구를 해보지 않았지만 $ pear_install_dir은 특히 맞춤 배 패키지를위한 몇몇 설치에서 어딘가에 설정할 수 있다고 가정하고 있습니다. 내가 틀렸을지도 모른다. 그러나 어쨌든, 이것은 정말로 나를위한 해결책에 가장 가깝습니다. 감사! – asartalo

+0

Mac OS X 용 MAMP 설치시 인스턴스 생성 문제가 발생했음을 기억해야합니다. 우분투에서 MAMP를 설치했을 때 제대로 작동했습니다. – 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(); 
관련 문제