#43313 [Opn]: getopt() doesn't handle unknown parameters
| From: | hradtke@php.net | Date: | Tue, 31 Mar 2009 15:41:13 +0000 |
| Subject: | #43313 [Opn]: getopt() doesn't handle unknown parameters | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-135399@lists.php.net to get a copy of this message | ||
ID: 43313
Updated by: hradtke@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] jani@php.net
Deassigning since Hannes apparently has no idea how to fix this.
------------------------------------------------------------------------
[2008-11-11 11:08:09] jani@php.net
Still fails after a year without response from Hannes.
------------------------------------------------------------------------
[2008-11-02 13:13:49] jani@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