ID:               43313
 Updated by:       hrad...@php.net
 Reported By:      RQuadling at GMail dot com
 Status:           Open
 Bug Type:         CGI related
 Operating System: *
 PHP Version:      5CVS-2008-11-11
 New Comment:

I have a patch for this bug.  Actually, I am not sure this is even a
bug.  POSIX says that getopt should break on the first non-option. 
Also, the php_getopt() function needs to break on the first non-option. 
Consider the following: php -n test.php -a 1 -b 2

That being said, the getopt() userspace function can be made to work
both ways.  I have a patch to allow php_getopt() to ignore unknown
parameters.  

One question: Should getopt() have its prototype changed to: array
getopt  ( string $options  [, array $longopts, bool posix ] ) ? It would
default to true if not specified (for BC).  Setting it to false would
make it ignore non-options.




Previous Comments:
------------------------------------------------------------------------

[2009-01-22 01:14:01] j...@php.net

Deassigning since Hannes apparently has no idea how to fix this.

------------------------------------------------------------------------

[2008-11-11 11:08:09] j...@php.net

Still fails after a year without response from Hannes.

------------------------------------------------------------------------

[2008-11-02 13:13:49] j...@php.net

Hannes, are you doing something about this?

------------------------------------------------------------------------

[2007-11-16 15:18:00] RQuadling at GMail dot com

Description:
------------
getopt() stops processing at the first unknown parameter.

I'm not sure if this is ...

a php bug - getopt should return them as is

or ...

a doc bug - getopt() will cease operation at the first hurdle.



My preference is to return them as is. Maybe a third param to the
function to collect unknown parameters. This would provide backward
compatibility if the function didn't die when an unknown parameter was
reached.




The code is a simple test to examine the command line.

Run this with this parameter

-a 1

and then with these

broken -a 1


Reproduce code:
---------------
<?php
var_dump($_SERVER['argv'], getopt('a:b', array('apple=', 'bag')));
?>

Expected result:
----------------
array(3) {
  [0]=>
  string(17) "C:\phpargtest.php"
  [1]=>
  string(2) "-a"
  [2]=>
  string(1) "1"
}
array(1) {
  ["a"]=>
  string(1) "1"
}

array(4) {
  [0]=>
  string(17) "C:\phpargtest.php"
  [1]=>
  string(6) "broken"
  [2]=>
  string(2) "-a"
  [3]=>
  string(1) "1"
}
array(1) {
  [0]=>
  string(6) "broken"
  ["a"]=>
  string(1) "1"
}


Actual result:
--------------
array(3) {
  [0]=>
  string(17) "C:\phpargtest.php"
  [1]=>
  string(2) "-a"
  [2]=>
  string(1) "1"
}
array(1) {
  ["a"]=>
  string(1) "1"
}

array(4) {
  [0]=>
  string(17) "C:\phpargtest.php"
  [1]=>
  string(6) "broken"
  [2]=>
  string(2) "-a"
  [3]=>
  string(1) "1"
}
array(0) {
}


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=43313&edit=1

Reply via email to