#43313 [Opn->Tbd]: getopt() doesn't handle unknown parameters

From: Date: Wed, 01 Apr 2009 11:34:32 +0000
Subject: #43313 [Opn->Tbd]: getopt() doesn't handle unknown parameters
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-2074@lists.php.net to get a copy of this message
ID: 43313 Updated by: jani@php.net Reported By: RQuadling at GMail dot com -Status: Open +Status: To be documented -Bug Type: CGI related +Bug Type: Documentation problem Operating System: * PHP Version: 5CVS-2008-11-11 New Comment: Let's stick with the POSIX way. And document it as is. Previous Comments: ------------------------------------------------------------------------ [2009-03-31 15:41:12] hradtke@php.net 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. ------------------------------------------------------------------------ [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

« previous php.doc.bugs (#2074) next »