On Jan 7, 2011, at 12:08 PM, Nicholas Kell wrote:

> 
> On Jan 7, 2011, at 11:01 AM, Joshua Kehn wrote:
> 
>> On Jan 7, 2011, at 11:55 AM, la...@garfieldtech.com wrote:
>> 
>>> Hi folks.  I have a project coming up that will involve writing a 
>>> non-trivial command line PHP application.  Most of it will be nice and 
>>> abstracted and standalone and all of that jazz, but it will need to do 
>>> command line interation.  I'm not sure yet if it will be interactive or if 
>>> I just need to parse lots of command line switches.
>>> 
>>> Has anyone used a CLI-handling library they like?  I recall briefly using 
>>> the PEAR CLI library many many years ago and disliking it because it was 
>>> only barely a step above the raw PHP-CLI SAPI, and still required lots of 
>>> if-else branching in my code.  I don't know if there's anything better 
>>> since then, however.  I prefer clean OO to procedural, but can work with 
>>> procedural if needs be.  The fewer dependencies it has the better as well.
>>> 
>>> Any recommendations?
>>> 
>>> (Open source, GPLv2-compatible required.)
>>> 
>>> --Larry Garfield
>> 
>> Larry-
>> 
>> Why are you writing a command line application in PHP? I would think that is 
>> starting off on a very wrong foot. 
>> 
>> Can you explain the requirements / use cases a bit more?
>> 
> 
> I agree. Not saying that it isn't doable, because it certainly is, but there 
> may be other languages that are available and easier to implement a CLI app, 
> such as Python, or some other QnD scripting language.

Pardon me but what's the big deal?

Put a shebang up top and then add:

//
// ----------------------------------------------------------
//      Get CLI args from argv
// ----------------------------------------------------------
//
function getargs($argv) 
{ 
        // ./cli.php file1 file2 --path=/foo/bar -t -B quux
        // getargs($GLOBALS['argv'])
        $args['self'] = array_shift( $argv ) ; 
        while( 0 < sizeof( $argv ) ) { 
                $arg = array_shift( $argv ) ; 
                if( '--' == substr( $arg , 0 , 2 ) ) { 
                        $eq = strpos( $arg , '=' ) ; 
                        $name = substr( $arg , 2 , $eq - 2 ) ; 
                        $val = substr( $arg , $eq + 1 ) ; 
                        $args[$name][] = $val ; 
                } else if( '-' == $arg[0] ) { 
                        $name = substr( $arg , 1 ) ; 
                        if (isset($argv[0][0]) && ( '-' != $argv[0][0] )) { 
                                $val = array_shift( $argv ) ; 
                        } else { 
                                $val = '' ; 
                        } 
                        $args[$name][] = $val ; 
                } else {
                        $args['file'][] = substr( $arg , 0 ) ; 
                }
        } 
        return $args ; 
} 


// ----------------------------------------------------------
//              Main
// ----------------------------------------------------------

//Get CLI options
$args = getargs($GLOBALS['argv']);
//Display Basic Help
if (isset($args['h']) || isset($args['help'])) {
        echo "./your_php_cli_app.php -h ....\n";
        echo "  -h - displays this help\n";
        echo "  ... is more of your command line args\n";
        echo "\n";
        exit;
}


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to