PHP_Compat
[ class tree: PHP_Compat ] [ index: PHP_Compat ] [ all elements ]

Source for file getopt.php

Documentation is available at getopt.php

  1. <?php
  2. // $Id: getopt.php,v 1.3 2008/11/24 04:18:49 aidan Exp $
  3.  
  4. define('PHP_COMPAT_GETOPT_NO_VALUE', 0);
  5. define('PHP_COMPAT_GETOPT_VALUE_REQUIRED', 1);
  6. define('PHP_COMPAT_GETOPT_VALUE_OPTIONAL', 2);
  7.  
  8. /**
  9.  * Replace getopt()
  10.  *
  11.  * @category    PHP
  12.  * @package     PHP_Compat
  13.  * @license     LGPL - http://www.gnu.org/licenses/lgpl.html
  14.  * @copyright   2004-2007 Aidan Lister <aidan@php.net>, Arpad Ray <arpad@php.net>
  15.  * @link        http://php.net/function.getopt
  16.  * @author      Jim Wigginton <terrafrost@php.net>
  17.  * @version     $Revision: 1.3 $
  18.  * @since       PHP 4.0.4
  19.  */
  20. function php_compat_getopt($options, $longopts = NULL)
  21. {
  22.     global $argv, $argc;
  23.     
  24.     $output = array();
  25.     $opt = '';
  26.     
  27.     if (is_array($options)) {
  28.         user_error('getopt() expects parameter 1 to be string, array given', E_USER_WARNING);
  29.         return false;
  30.     }
  31.     
  32.     for ($i = 1; $i < $argc; $i++) {
  33.         switch (true) {
  34.             case is_array($longopts) && substr($argv[$i], 0, 2) == '--':
  35.                 $pos = strpos($argv[$i], '=');
  36.                 $opt = is_int($pos) ? substr($argv[$i], 2, $pos - 2) : substr($argv[$i], 2);
  37.                 
  38.                 list($match) = array_values(preg_grep('#^' . preg_quote($opt, '#') . ':{0,2}$#', $longopts));
  39.                 if (is_null($match)) {
  40.                     break;
  41.                 }
  42.                 $value = $pos === false ? null : substr($argv[$i], $pos + 1);
  43.                 $type = strlen(substr($match, strlen($opt)));
  44.                 
  45.                 php_compat_getopt_helper($opt, $value, $type, $output);
  46.                 break;
  47.             case $argv[$i][0] == '-' && preg_match('#' . preg_quote($argv[$i][1], '#') . '(:{0,2})#', $options, $matches):
  48.                 $opt = $argv[$i][1];
  49.                 $type = strlen($matches[1]);
  50.                 $value = substr($argv[$i], 2);
  51.                 if ($type == 0) {
  52.                     if ($value) {
  53.                         $argv[$i] = '-' . $value;
  54.                         --$i;
  55.                     }
  56.                     $value = null;
  57.                 }
  58.                 
  59.                 php_compat_getopt_helper($opt, $value, $type, $output);
  60.                 break;
  61.             case !empty($opt):
  62.                 if (isset($output[$opt]) && is_array($output[$opt])) {
  63.                     $output[$opt][count($output[$opt]) - 1] = $argv[$i];
  64.                 } else {
  65.                     $output[$opt] = $argv[$i];
  66.                 }
  67.                 $opt = '';
  68.         }
  69.         
  70.         if (!empty($value) || $type == PHP_COMPAT_GETOPT_NO_VALUE) {
  71.             $opt = '';
  72.         }
  73.     }
  74.     
  75.     return $output;
  76. }
  77.  
  78. function php_compat_getopt_helper($opt, $value, $type, &$output) {
  79.     switch ($type) {
  80.         case PHP_COMPAT_GETOPT_NO_VALUE:
  81.             switch (true) {
  82.                 case !isset($output[$opt]):
  83.                     $output[$opt] = false;
  84.                     break;
  85.                 case is_array($output[$opt]):
  86.                     $output[$opt][] = false;
  87.                     break;
  88.                 default:
  89.                     $output[$opt] = array($output[$opt], false);
  90.             }
  91.             break;
  92.         case PHP_COMPAT_GETOPT_VALUE_REQUIRED:
  93.             if (!empty($value)) {
  94.                 switch (true) {
  95.                     case !isset($output[$opt]):
  96.                         $output[$opt] = $value;
  97.                         break;
  98.                     case is_array($output[$opt]):
  99.                         $output[$opt][] = $value;
  100.                         break;
  101.                     default:
  102.                         $output[$opt] = array($output[$opt], $value);
  103.                 }
  104.             }
  105.             break;
  106.         case PHP_COMPAT_GETOPT_VALUE_OPTIONAL:
  107.             $value = !empty($value) ? $value : false;
  108.             switch (true) {
  109.                 case !isset($output[$opt]):
  110.                     $output[$opt] = $value;
  111.                     break;
  112.                 case is_array($output[$opt]):
  113.                     $output[$opt][] = $value;
  114.                     break;
  115.                 default:
  116.                     $output[$opt] = array($output[$opt], $value);
  117.             }
  118.     }
  119. }
  120.  
  121. // Define
  122. if (!function_exists('getopt')) {
  123.     function getopt($options, $longopts = NULL) {
  124.         return php_compat_getopt($options, $longopts);
  125.     }
  126. }
  127. ?>

Documentation generated on Mon, 11 Mar 2019 15:26:35 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.