php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #69015 php-cgi's getopt does not see $argv
Submitted: 2015-02-08 16:05 UTC Modified: 2015-02-14 14:36 UTC
From: lonnie at abelbeck dot com Assigned: laruence
Status: Closed Package: CGI/CLI related
PHP Version: 5.5.21 OS: Linux
Private report: No CVE-ID:
 [2015-02-08 16:05 UTC] lonnie at abelbeck dot com
Description:
------------
On our embedded system, we only build the php-cgi version to save space, /usr/bin/php is php-cgi.

Note: This problem does not exist when calling php-cli via the command-line, only calling php-cgi via the command-line.

When upgrading from PHP 5.3 to PHP 5.5, there seems to be some optimization that keeps $argv from being seen by 'getopt' unless $_SERVER['argv'] is referenced in the script.  Interestingly $_SERVER['argv'] does not have to be executed to fix the behavior.

In the test script below, uncommenting "var_dump($_SERVER['argv']);" allows 'getopt' to work.


Test script:
---------------
#!/usr/bin/php -qnC
<?php
echo "PHP Version: ".phpversion()."\n";
echo "register_argc_argv=".ini_get('register_argc_argv')."\n";
var_dump($argv);
//var_dump($_SERVER['argv']);

$opts = getopt("abc:");
var_dump($opts);
?>


Expected result:
----------------
./test-argv-getopt.php -ab -c4
PHP Version: 5.5.21
register_argc_argv=1
array(3) {
  [0]=>
  string(22) "./test-argv-getopt.php"
  [1]=>
  string(3) "-ab"
  [2]=>
  string(3) "-c4"
}
array(3) {
  ["a"]=>
  bool(false)
  ["b"]=>
  bool(false)
  ["c"]=>
  string(1) "4"
}


Actual result:
--------------
./test-argv-getopt.php -ab -c4
PHP Version: 5.5.21
register_argc_argv=1
array(3) {
  [0]=>
  string(22) "./test-argv-getopt.php"
  [1]=>
  string(3) "-ab"
  [2]=>
  string(3) "-c4"
}
bool(false)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-02-12 07:28 UTC] laruence@php.net
this fix is easy.

but I'd like to discuss , php-cgi is face to fastcgi protocol, in such case, I don't think get opt make sense, right?

thanks
 [2015-02-12 13:24 UTC] fa@php.net
While it does not make sense usually I don't see a reason to have the SAPIs differ in behavior for no good reasons.
Unless there's some performance implications, I think it should be fixed.
 [2015-02-14 14:36 UTC] laruence@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: laruence
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Mon May 29 05:01:44 2017 UTC