Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: c70b34b537
Fetching contributors…

Cannot retrieve contributors at this time

355 lines (326 sloc) 12.096 kb
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Scott Mattocks <scottmattocks@php.net> |
// +----------------------------------------------------------------------+
//
// $Id$
/**
* Example usage script for Console_Getargs.
*
* Console_Getargs is a class to help define and parse commandline
* options. The goal is to easily identify arguments a user may pass
* to an application run from the commandline. By specifying option
* names and rules, the applicatioin programmer can be sure that a
* user has given the application the needed information before any
* processing begins.
*
* This file attempts to give the reader an understanding of the
* usage and power of Console_Getargs through an example. At the
* bottom of this file you will see several commented commands
* for running this script. While this script aims at being as
* thorough as possible, it is by no means a complete set of the
* possible combinations that could be used with Console_Getargs.
*
* @author Bertrand Mansion <bmansion@mamasam.com>
* @author Scott Mattocks <scottmattocks@php.net>
* @copyright 2004
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version @VER@
* @package Console_Getargs
*/
error_reporting(E_ALL);
/**
* Dummy class for example.
*
* This class returns the number of lines in a given file. It can
* optionally give you the first X lines, plus "highlight" certain
* words by surrounding them in '*'. When told to, this class can
* get very chatty.
*
* Please note that this class is not intended to be overly useful
* or efficient. It is meant simply to demonstrate the capabilities
* of Console_Getargs. It may be neccessary to change some paths
* depending on how you have installed Console_Getargs and the setup
* of your system.
*
* Run the following commands to see how to use Console_Getargs:
*
* $ php -q example2.php -h
* $ php -q example2.php
* $ php -q example2.php -v 1
* $ php -q example2.php -v
* $ php -q example2.php -dv
* $ php -q example2.php -dvs 10
* $ php -q example2.php -vs 10 -f if
* $ php -q example2.php -vs 10 -hi if
* $ php -q example2.php -vs 10 -f if file
* $ php -q example2.php -s 10 ../Getargs.php
* $ php -q example2.php -s 10 -f if file --parameters=../Getargs.php
*
* Also try creating your own array of arguments and passing it to the
* example instance on construction. You array should be numerically
* indexed. Here are a few examples:
* array('-d', '-vs', '10')
* array('--debug', '--verbose', '../Getargs.php');
*/
class Example {
/**
* Show debug output.
* @var boolean
*/
var $debug;
/**
* The complete path to the file to count lines in.
* @var string
*/
var $file;
/**
* How many lines to show.
* @var integer
*/
var $showLines;
/**
* The level of chattyness.
* @var integer
*/
var $verbose;
/**
* The words to find and highlight.
* @var array
*/
var $findWords = array();
/**
* Constructor.
*
* This will create an instance of the example object. If
* you pass an array of arguments on construction, that
* array will be used instead of the default agument list.
*
* @access public
* @param array $argArray The optional argument list.
* @return void
*/
function Example($argArray = NULL)
{
// Get the config array
require_once 'Console/Getargs.php';
$config = $this->getConfigArray();
// Get the arguments.
if (is_array($argArray)) {
// Use given arg list not $_SERVER['argv'].
$args =& Console_Getargs::factory($config, $argArray);
} else {
// Use $_SERVER['argv'].
$args =& Console_Getargs::factory($config);
}
// Check for errors.
if (PEAR::isError($args)) {
if ($args->getCode() === CONSOLE_GETARGS_ERROR_USER) {
// User put illegal values on the command line.
echo Console_Getargs::getHelp($config, NULL, $args->getMessage(), 78, 4)."\n";
} else if ($args->getCode() === CONSOLE_GETARGS_HELP) {
// User needs help.
echo Console_Getargs::getHelp($config, NULL, NULL, 78, 4)."\n";
}
exit;
} else {
// Assign the member vars.
$this->debug = $args->getValue('debug');
$this->file = $args->getValue(CONSOLE_GETARGS_PARAMS);
$this->showLines = $args->getValue('showlines');
$this->verbose = $args->getValue('verbose');
$this->findWords = $args->getValue('find');
// Make sure the file is readable.
if (!@is_readable($this->file)) {
$msg = $this->file . ' is not readable.';
echo Console_Getargs::getHelp($config, NULL, $msg) . "\n";
exit;
}
}
}
/**
* Return the config array.
*
* The config array is the set of rules for command line
* arguments. For more details please read the comments
* in Getargs.php
*
* @static
* @access public
* @param none
* @return &array
*/
function &getConfigArray()
{
$configArray = array();
// Allow the user to show debug output.
$configArray['debug'] = array('short' => 'db',
'max' => 0,
'desc' => 'Show debug output.'
);
// Make the program chatty.
$configArray['verbose'] = array('short' => 'v',
'min' => 0,
'max' => 1,
'desc' => 'Set the verbose level.',
'default' => 2
);
// How many lines should be shown.
$configArray['showlines'] = array('short' => 's',
'min' => 1,
'max' => 1,
'desc' => 'How many lines of the file should be shown.',
);
// What file should be used.
$configArray[CONSOLE_GETARGS_PARAMS] = array('min' => 1,
'max' => 1,
'desc' => 'The file to count lines from.',
'default' => basename(__FILE__)
);
// Show the help message.
// (Not really needed unless you want help to show up in the
// list of options in the help menu.)
$configArray['help'] = array('short' => 'h',
'max' => 0,
'desc' => 'Show this help.'
);
// Search for and highlight a word.
$configArray['find|highlight'] = array('short' => 'f|hi',
'max' => -1,
'min' => 0,
'desc' => 'Find words within the lines displayed. Words found will be changed from "word" to "*word*".'
);
return $configArray;
}
/**
* The method for displaying the results.
*
* This will output atleast the number of lines. Depending on the
* options passed on the command line, more info may be shown.
*
* @access public
* @param none
* @return void
*/
function display()
{
// How chatty should the program be.
if ($this->verbose > 1) {
echo "Welcome to the Console_Getargs example2 script!\n";
}
if ($this->verbose > 0) {
echo basename($this->file) . ' has ';
}
// Spit out the number of lines.
echo $this->countLines();
if ($this->verbose > 0) {
echo ' lines.';
}
echo "\n";
// If the user wants to highlight ceratin words do it.
if (count($this->findWords)) {
// Chattyness.
if ($this->verbose) {
echo "Searching for:\t";
settype($this->findWords, 'array');
foreach ($this->findWords as $word) {
echo $word . ', ';
}
echo "\n";
}
// Spit out the requested number of lines.
echo $this->find($this->getFirstXLines());
} else {
// Just output the lines.
echo $this->getFirstXLines();
}
}
/**
* Return the number of lines in the file.
*
* @access public
* @param none
* @return integer
*/
function countLines()
{
return count(file($this->file));
}
/**
* Return the requested number of lines.
*
* Depending on the arguments passed on the command line, some
* words may be surrounded with '*'.
*
* @access public
* @param none
* @return string
*/
function getFirstXLines()
{
// Show debug output if requested.
if ($this->debug) {
echo "Getting all lines from file\t";
}
// Get the lines from the file.
$lines = file($this->file);
if ($this->debug) {
echo "OK\n";
}
$retString = '';
// Collect the lines.
if (count($lines) && !empty($this->showLines)) {
for ($i = 0; $i < $this->showLines; ++$i) {
if ($this->debug) {
echo $i . "\t" . $lines[$i] . "\n";
}
$retString.= $lines[$i];
}
}
return $retString;
}
/**
* Highlight the requested words.
*
* If the user wants some words highlighted, surround them in
* '*'.
*
* @access public
* @param string $text The text to find words in.
* @return string
*/
function find($text)
{
$highlighted = $text;
settype($this->findWords, 'array');
// Replace each word.
foreach ($this->findWords as $word) {
$highlighted = str_replace($word, '*' . $word . '*', $highlighted);
}
return $highlighted;
}
}
// Create a new instance of the Example.
$ex = new Example();
// Show the results.
$ex->display();
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
?>
Jump to Line
Something went wrong with that request. Please try again.