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