diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2012-06-13 10:49:41 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2012-06-13 10:49:41 +0200 |
commit | 5218701a4ac1507c472c2bddaca9941f4a4af1d7 (patch) | |
tree | e864c1c30bb873c0925df2df2689afd909783d12 /program | |
parent | 2950ce49eff42eb08cd4363975a3292692cbccd8 (diff) |
Improve getopt feature for command line scripts
Diffstat (limited to 'program')
-rw-r--r-- | program/include/clisetup.php | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/program/include/clisetup.php b/program/include/clisetup.php index c947570f2..039020bdc 100644 --- a/program/include/clisetup.php +++ b/program/include/clisetup.php @@ -5,7 +5,7 @@ | program/include/clisetup.php | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2010, The Roundcube Dev Team | + | Copyright (C) 2010-2012, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -31,27 +31,29 @@ require_once INSTALL_PATH . 'program/include/iniset.php'; /** * Parse commandline arguments into a hash array */ -function get_opt($aliases=array()) +function get_opt($aliases = array()) { $args = array(); - for ($i=1; $i<count($_SERVER['argv']); $i++) - { + for ($i=1; $i < count($_SERVER['argv']); $i++) { $arg = $_SERVER['argv'][$i]; - if (substr($arg, 0, 2) == '--') - { + $value = true; + $key = null; + + if ($arg[0] == '-') { + $key = preg_replace('/^-+/', '', $arg); $sp = strpos($arg, '='); - $key = substr($arg, 2, $sp - 2); - $value = substr($arg, $sp+1); - } - else if ($arg{0} == '-') - { - $key = substr($arg, 1); - $value = $_SERVER['argv'][++$i]; + if ($sp > 0) { + $key = substr($key, 0, $sp - 2); + $value = substr($arg, $sp+1); + } + else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') { + $value = $_SERVER['argv'][++$i]; + } + + $args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value; } else - continue; - - $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value); + $args[] = $arg; if ($alias = $aliases[$key]) $args[$alias] = $args[$key]; |