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