我不确定这是否可行,但我需要做一个肮脏的黑客。 假设我从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]:)
答案 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;
}