Viewing file: Cli.php (14.03 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
* CLI Script to generate text phpinfo() style PEAR information
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.01 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_01.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category PEAR
* @package PEAR_Info
* @author Laurent Laville <pear@laurent-laville.org>
* @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version CVS: $Id: Cli.php,v 1.4 2009/01/07 21:52:44 farell Exp $
* @link http://pear.php.net/package/PEAR_Info
* @since File available since Release 1.8.0
*/
require_once 'PEAR/Info.php';
require_once 'Console/Getargs.php';
/**
* CLI Script to display information about your PEAR installation
*
* <code>
* <?php
* require_once 'PEAR/Info/Cli.php';
* $cli = new PEAR_Info_Cli();
* $cli->run();
* ?>
* </code>
*
* @category PEAR
* @package PEAR_Info
* @author Laurent Laville <pear@laurent-laville.org>
* @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version Release: 1.9.2
* @link http://pear.php.net/package/PEAR_Info
* @since Class available since Release 1.8.0
*/
class PEAR_Info_Cli extends PEAR_Info
{
/**
* @var array Current CLI Flags
* @since 1.8.0
*/
var $opts = array();
/**
* @var string error message
* @since 1.8.0
*/
var $error;
/**
* @var object Console_Getargs instance
* @since 1.8.0
*/
var $args;
/**
* ZE2 Constructor
*
* @since 1.8.0
*/
function __construct()
{
$this->opts = array(
'php-dir' =>
array('short' => 'pd',
'desc' => 'PEAR directory',
'default' => '',
'min' => 0 , 'max' => 1),
'usr-cfg' =>
array('short' => 'uc',
'desc' => 'User Configuration File',
'default' => '',
'min' => 0 , 'max' => 1),
'sys-cfg' =>
array('short' => 'sc',
'desc' => 'System Configuration File',
'default' => '',
'min' => 0 , 'max' => 1),
'http-proxy' =>
array('short' => 'hp',
'desc' => 'HTTP Proxy Server Address',
'default' => '',
'min' => 0 , 'max' => 1),
'all' =>
array('short' => 'a',
'desc' => 'Display informations for installed packages',
'default' => PEAR_INFO_ALL,
'min' => 0 , 'max' => 1),
'allchannels' =>
array('short' => 'A',
'desc' => 'List packages from all channels, '
. 'not just the default one',
'max' => 0),
'channel' =>
array('short' => 'c',
'desc' => 'Specify which channel',
'default' => '',
'min' => 0 , 'max' => 1),
'version' =>
array('short' => 'V',
'desc' => 'Print version information',
'max' => 0),
'help' =>
array('short' => 'h',
'desc' => 'Show this help',
'max' => 0),
);
$this->args = & Console_Getargs::factory($this->opts);
if (PEAR::isError($this->args)) {
if ($this->args->getCode() === CONSOLE_GETARGS_HELP) {
$this->error = '';
} else {
$this->error = $this->args->getMessage();
}
return;
}
$options = array('channels' => array('pear.php.net'),
'resume' => PEAR_INFO_ALL);
// php-dir
if ($this->args->isDefined('pd')) {
$pear_dir = $this->args->getValue('pd');
} else {
$pear_dir = '';
}
// usr-cfg
if ($this->args->isDefined('uc')) {
$user_file = $this->args->getValue('uc');
if (!file_exists($user_file)) {
$this->error = 'Failed opening PEAR user configuration file "'
. $user_file
. '". Please check your spelling and try again.';
return;
}
} else {
$user_file = '';
}
// sys-cfg
if ($this->args->isDefined('sc')) {
$system_file = $this->args->getValue('sc');
if (!file_exists($system_file)) {
$this->error = 'Failed opening PEAR system configuration file "'
. $system_file
. '". Please check your spelling and try again.';
return;
}
} else {
$system_file = '';
}
// http-proxy
if ($this->args->isDefined('hp')) {
$proxy = $this->args->getValue('hp');
$res = PEAR_Info::setProxy($proxy);
if ($res === false) {
$this->error = 'Failed define Proxy Server Address.'
. ' Please check your spelling and try again.';
return;
}
}
// all
if ($this->args->isDefined('a')) {
$a = $this->args->getValue('a');
if (is_numeric($a)) {
$options['resume'] = intval($a);
} else {
$this->error = "No valid 'resume' option for argument all."
. ' Please check your spelling and try again.';
return;
}
}
// allchannels
$A = $this->args->getValue('A');
if (isset($A)) {
$options['channels'] = array();
}
// channel
if ($this->args->isDefined('c')) {
$chan = $this->args->getValue('c');
if (is_string($chan)) {
$options['channels'] = explode(',', $chan);
} else {
$this->error = 'No valid channel list provided.'
. ' Please check your spelling and try again.';
return;
}
}
// version
$V = $this->args->getValue('V');
if (isset($V)) {
$this->error = 'PEAR_Info (cli) version 1.9.2'
. ' (http://pear.php.net/package/PEAR_Info)';
return;
}
parent::__construct($pear_dir, $user_file, $system_file, $options);
}
/**
* ZE1 PHP4 Compatible Constructor
*
* @since 1.8.0
*/
function PEAR_Info_Cli()
{
$this->__construct();
}
/**
* Run the CLI Script
*
* @return void
* @access public
* @since 1.8.0
*/
function run()
{
if (isset($this->error)) {
if (strpos($this->error, 'PEAR_Info') === false) {
$this->_printUsage($this->error);
} else {
// when Version asked, do not print help usage
echo $this->error;
}
return;
}
$table = 0;
$skip_table = 0;
$tdeps = false;
$td = '';
$lines = explode("\n", $this->info);
foreach ($lines as $line) {
$line = trim($line);
if (strlen($line) == 0 && $tdeps === false) {
// skip blank line
} elseif ($line == '<br />') {
// skip
} elseif (substr($line, 0, 6) == '<a id=') {
// skip package anchor
} elseif (substr($line, 0, 4) == '<h1>') {
// skip PEAR credits link
} elseif (substr($line, 0, 4) == '<h2>') {
if (substr($line, 4, 10) == '<a id="top') {
// skip anchors
$skip_table = 1;
} else {
$td = strip_tags($line);
echo PHP_EOL . $td . PHP_EOL;
}
} elseif ($skip_table == 0 && $line == '<table>') {
echo PHP_EOL;
$table++;
} elseif ($line == '</table>') {
$skip_table = 0;
if ($tdeps) {
$td = PHP_EOL . implode(PHP_EOL, $deps);
}
$tdeps = false;
} elseif ($skip_table == 0 && $line == '<tr>') {
$tr_class = '';
} elseif ($skip_table == 0 && substr($line, 0, 3) == '<tr') {
$tr_class = substr($line, 11, 1);
if ($tr_class == 'w') {
$tdeps = true;
$tr_w = array();
$w = 0;
} elseif ($tr_class == 'h') {
$td = '';
} else {
$td = array('', '');
}
} elseif ($skip_table == 0 && $line == '</tr>' && $tr_class != '') {
if ($tr_class == 'h') {
$td = explode(' ', $td);
}
if (isset($td_v)) {
$td = $td_v;
}
if ($tdeps) {
if ($tr_w[0] != 'Required') {
if ($tr_w[1] == 'PHP') {
$td = $tr_w[1] .' '. $tr_w[3] .' '. $tr_w[4];
} else {
if ($tr_w[3] == 'has' || $tr_w[3] == 'not') {
$td = $tr_w[3] .' '. $tr_w[2] .' '. $tr_w[1] .' '.
$tr_w[4];
} else {
$td = strip_tags($tr_w[2]) .' '. $tr_w[1] .' '.
$tr_w[3] .' '. $tr_w[4];
}
if ($tr_w[0] == 'No') {
$td .= ' (optional)';
}
}
$deps[] = ' - ' . $td;
}
$w = 0;
} else {
if (isset($td_c) && count($td_c) > 0) {
echo $td[0] . ' => ' . PHP_EOL;
echo $td_c[0] . PHP_EOL;
echo $td_c[1] . PHP_EOL;
} else {
echo $td[0] . ' => ' . $td[1] . PHP_EOL;
}
}
} elseif ($skip_table == 0 && $line == '</td>') {
if (isset($td_v)) {
if (empty($td_v[0])) {
$td_v[0] = $td;
$td = '';
} else {
$td_v[1] = $td;
}
}
} elseif ($skip_table == 0 && $line == '<td>') {
// skip
} elseif ($skip_table == 0 && substr($line, 0, 3) == '<td') {
if ($tr_class == 'h') {
$td = '';
} elseif ($tr_class == 'v') {
if ($line == '<td class="e">') {
$td_v = array('', '');
$td = '';
} else {
unset($td_v);
preg_match('`\<td(.*)\>(.*)\</td\>`', $line, $matches);
if (empty($matches[2])) {
$td_c = array();
if (substr($line, 0, 8) == '<td><dl>') {
preg_match('`\<td\>\<dl\>\<dt\>(.*)\</dt\>(.*)\<dt\>(.*)\</dt\>(.*)\</dl\>\</td\>`', $line, $matches);
$td_c[0] = ' - '.$matches[1];
$td_c[1] = ' - '.$matches[3];
$dd_user = $matches[2];
$dd_sys = $matches[4];
preg_match('`\<dd class="cfg_(.*)"\>(.*)\</dd\>`', $dd_user, $matches);
$td_c[0] .= strtoupper($matches[1]).' => '.$matches[2];
preg_match('`\<dd class="cfg_(.*)"\>(.*)\</dd\>`', $dd_sys, $matches);
$td_c[1] .= strtoupper($matches[1]).' => '.$matches[2];
} else {
$td[1] = strip_tags($matches[0]);
}
} else {
if (empty($matches[1])) {
$td[1] = strip_tags($matches[2]);
} else {
$td[0] = $matches[2];
}
}
}
}
} else {
if ($tdeps) {
$tr_w[$w] = $line;
$w++;
} else {
if ($line == '<table class="d">') {
$deps = array();
} else {
$line = strip_tags($line);
$td .= $line;
}
}
}
}
}
/**
* Show full help information
*
* @param string $footer (optional) page footer content
*
* @return void
* @access private
*/
function _printUsage($footer = '')
{
$header = 'Usage: '
. basename($_SERVER['SCRIPT_NAME']) . " [options]\n\n";
echo Console_Getargs::getHelp($this->opts, $header,
"\n$footer\n", 78, 2)."\n";
}
}
?>
|