Как определить, установлен ли пакет PEAR в php-скриптах? - PullRequest
4 голосов
/ 22 декабря 2010

Я пытаюсь написать код для отслеживания зависимостей.Есть ли способ программно определить, был ли установлен пакет PEAR?Я думаю что-то вроде:

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

Я знаю, что вы можете просто определить, существует ли файл класса для этого пакета, но я в основном хочу узнать, установлен ли PEAR, потому что иногда некоторые библиотеки предоставляют другие средствавключая их код (например, в PHPUnit есть канал груши и репозиторий git.).

Спасибо за помощь!

Ответы [ 3 ]

7 голосов
/ 22 декабря 2010

Для этого вам нужно использовать класс PEAR_Registry (именно это использует сам скрипт PEAR).Прочитайте блог Адама Харви " pear -> list " от 3 лет назад - все необходимые вам подробности / примеры есть.

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 голосов
/ 15 января 2014

Почему бы просто не включить пакет и посмотреть, существует ли класс?

// 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();
0 голосов
/ 24 июня 2013

Вы можете использовать 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";
  }
?>
...