Bug #76347 [Asn->Nab]: getopt() only usable once

From: Date: Thu, 24 May 2018 13:08:22 +0000
Subject: Bug #76347 [Asn->Nab]: getopt() only usable once
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-215355@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=76347&edit=1

 ID:                 76347
 Updated by:         cmb@php.net
 Reported by:        kaishos at gmail dot com
 Summary:            getopt() only usable once
-Status:             Assigned
+Status:             Not a bug
 Type:               Bug
 Package:            PHP options/info functions
 Operating System:   ubuntu0.16.04.1
 PHP Version:        7.0.30
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

The last two examples also behave as expected, since -f is no
valid option for getopt('t:'), so “foo” is not regarded as
argument of the -f option, but rather as non-option, which
terminates further processing of options.


Previous Comments:
------------------------------------------------------------------------
[2018-05-24 12:33:47] kaishos at gmail dot com

Ah yes, now I see that I did wrong, it was that there should be no space between arguments -f and -t
and their values for it work as you pointed out.

-ffoo -tbar
  Array
  (
      [f] => foo
  )
  Array
  (
      [t] => bar
 )

-ffoo -t bar (this works)
  Array
  (
      [f] => foo
  )
  Array
  (
      [t] => bar
 )

-f foo -tbar
Array
(
    [f] => foo
)

Array
(
)


-f foo -t bar
Array
(
    [f] => foo
)

Array
(
)

------------------------------------------------------------------------
[2018-05-24 08:53:59] cmb@php.net

From what I can tell, no functionality has been removed. At least,
I get the same result with PHP 5.6.32, for instance.  And this
result is to be expected, since f: looks for an option with a
required argument (which is -t in this case), and t: looks for an
option with a required argument which is not there.  Compare that
to:

  php test.php -ffoo -tbar

  =>

  Array
  (
      [f] => foo
      [t] => bar
  )
  Array
  (
      [t] => bar
 )

Which is also expected behavior.


So again, do you get differing results?

------------------------------------------------------------------------
[2018-05-24 08:13:05] kaishos at gmail dot com

Well then I know, as this worked before we upgraded to 7.0, strange that existing functionality was
removed then

------------------------------------------------------------------------
[2018-05-23 21:20:26] cmb@php.net

Firstly, active suport support for PHP 7.0 ended five months
ago[1], so this branch will only receive security related fixes.

Secondly, the expected result is actually:

  Array
  (
      [f] => -t
  )
  Array
  (
  )

See <http://php.net/manual/en/function.getopt.php>.

If you really get the reported actual result with an actively
supported PHP version, this would be a bug.  Please check again.

[1] <http://php.net/supported-versions.php>

------------------------------------------------------------------------
[2018-05-16 08:42:22] kaishos at gmail dot com

Description:
------------
This affects php 7.0.28 that is default packages with ubuntu, could not find it in the list

seems that it will not parse more options if you have parsed one.

it has similarity with:
https://bugs.php.net/bug.php?id=35594

Test script:
---------------
create file called test.php and add:

<?php
    $fromOpt = getopt("f:");
    $toOpt = getopt("t:");

    print_r($fromOpt);
    print_r($toOpt);

?>
https://bugs.php.net/bug.php?id=35594&edit=1

then run: 
php test.php -f -t





Expected result:
----------------
Array
(
    [f] =>
)
Array
(
    [t] =>
)

Actual result:
--------------
Array
(
    [f] =>
)
Array
(
)


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



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


Thread (6 messages)

« previous php.bugs (#215355) next »