2

これが可能かどうかはわかりませんが、ダーティハックを作成する必要があります。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

4 に答える 4

6

で 3 番目の要素を削除しようとしていますunset($argv[2])

配列はゼロベースです。したがって、2 番目の要素を削除するには、次のようにします。

unset($argv[1])

于 2012-12-05T09:58:31.897 に答える
2

PHPスクリプト内から$argcと$argvを操作することは、AFAIKでは不可能です。これは、値がスクリプト自体の一部ではなく、呼び出しスコープで定義されているためです。

別の方法として、配列をコピーし、最後の引数をポップし、exec() または system() を使用して「サード パーティ コード」を呼び出し、縮小されたコピーを渡すことができます。

于 2012-09-28T10:40:22.020 に答える
1

変数の値を変更できます。

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

これは、この変数に依存する PHP で記述されたコードに影響を与える可能性があります。(そして、これはすでにあなたが望むものかもしれません)。

getopt()PHP の内部関数の動作に影響を与えるような方法で、フードの下で argv と argc を変更する方法が見つかりませんでした。

于 2012-12-14T01:04:49.163 に答える
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;
  }
于 2012-12-13T13:23:48.397 に答える