On Thursday 16 January 2003 06:51, Eli Criffield wrote:
> I can't seem to find any examples of code using getopt() around. I'm
> thinking not many people use php for command line shell scripts.
>
> Here is what i came up with for getopt();
>
> <?
> $options = getopt("a:bc");
>
> reset($options);
> while(list($key, $value) = each($options)) {
>     switch ($key) {
>         case 'b':
>             $B=1;
>             break;
>         case 'a':
>             $A=$value;
>             break;
>         case 'c':
>             $C=1;
>             break;
>         default:
>             echo "unknown option";
>           // print usage or something
>             break;
>     }
> }
> ?>
>
> The problem with this is it never hits default in the switch. If you give
> an argument that it doesn't know about it accepts it without doing anything
> and without an error, 

getopt() has already sanitised the arguments for you thus unknown 
options/switches do not make it into $options -- meaning you cannot test for 
them! Try print_r($options) and enter differing combinations of 
options/switches and see what you get.

> same thing if you don't give a value for an argument
> thats supposed to have one (like -a above).

That you have to test for yourself. In your example above if $A is empty then 
inform the user.

> Oh and --long arguments would
> be nice too.

Yes and I'll have fries with that as well please ;-)

> So why not use the Console/Getopt.php library you ask. Because i can't
> figure out how to parse the output array. I can figure out the first part
>
> <?
> require 'Console/Getopt.php';
>
> $optclass =  new Console_Getopt;
> $args = $optclass->readPHPArgv();
> array_shift($args);
>
> $shortoptions = "a:bc";
> $longoptions = array("long", "alsolong=", "doublelong==");
>
> $options = $optclass->getopt( $args, $shortoptions, $longoptions);
> print_r($options);
> ?>
>
> But that returns an array with more then one dimension and i have no idea
> how to loop though to set variables like i did with getopt().

Ok, here $options consists of 2 arrays, the first ($options[0]) is an array 
containing all the valid options. To read them you can use:

  foreach ($options[0] as $opt) {
    echo "Option::{$opt[0]}   Value::{$opt[1]}\n";
  }

> My questions are what is the preferred way to get command line options,
> is there a way to give errors 

Yes, you manually check for them!

> and take long arguments with getopt(),

Doesn't look it.

The second array ($options[1]) just contains the rest of your command line.

Using Console_Getopt if an unknown option/switch is given a PEAR_Error is 
raised thus you have to check/trap for that.

-- 
Jason Wong -> Gremlins Associates -> www.gremlins.biz
Open Source Software Systems Integrators
* Web Design & Hosting * Internet & Intranet Applications Development *

/*
San Francisco isn't what it used to be, and it never was.
                -- Herb Caen
*/


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

Reply via email to