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