PHP CLI:从ARGV中删除最后一个元素

时间:2012-09-28 10:29:30

标签: php argv

我不确定这是否可行,但我需要做一个肮脏的黑客。 假设我从cli调用php

php script.php one two

然后在script.php中我正在使用two参数做一些事情,然后我想删除它,所以后面包含的第三方代码,初始命令是

php script.php one

我尝试了unset($argv[2])unset($GLOBALS['argv'][2]),但这不起作用。毕竟可能是我想要做的吗?

更新: 不起作用=我从第三方代码“太多参数”获得例外

更新:当然它应该是argv [1],但它只是在这个问题中的拼写错误,而不是实际问题。请假设我写了argv [1]:)

4 个答案:

答案 0 :(得分:6)

您正尝试使用unset($argv[2])删除第三个元素。

数组从零开始。所以要删除第二个元素使用:

  

unset($argv[1])

答案 1 :(得分:2)

在PHP脚本中操作$ argc和$ argv是不可能的AFAIK。这是因为这些值不是脚本本身的一部分,而是在调用范围中定义的。

作为替代方案,您可以复制数组,弹出最后一个参数并使用exec()或system()调用“第三方代码”并移交简化副本。

答案 2 :(得分:1)

您可以更改变量的值:

  • $argv
  • $argc
  • $_SERVER['argv']
  • $_SERVER['argc']
  • $GLOBALS['argv']
  • $GLOBALS['argc']

这可能会影响依赖于此变量的PHP编写的代码。 (这可能已经是你想要的了。)

我发现无法改变argv和argc的方式,可能会影响PHP内部函数(如getopt())的行为。

答案 3 :(得分:0)

是的,如果您愿意,可以改变这一点。

我将此代码用于我正在运行的cli脚本

foreach( $argv as $key => $arg )
  if( $arg == '-s' )
  {
    $s = $argv[ ++$key ];
    unset( $argv[   $key ], $_SERVER[ 'argv' ][ $key ] );
    unset( $argv[ --$key ], $_SERVER[ 'argv' ][ $key ] );
    $argv = array_values( $argv );
    $_SERVER[ 'argc' ]--;
    break;
  }