ScotlandPHP 2016

$argv

(PHP 4, PHP 5, PHP 7)

$argvスクリプトに渡された引数の配列

説明

コマンドラインから実行したときに、 現在のスクリプトに渡されたすべての引数の配列が含まれます。

注意: 最初の引数 $argv[0] は常に、スクリプトの実行に使う名前となります。

注意: この変数は、register_argc_argv が無効になっている場合には使えません。

例1 $argv の例

<?php
var_dump
($argv);
?>

このサンプルを php script.php arg1 arg2 arg3 と実行します。

上の例の出力は、 たとえば以下のようになります。

array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

参考

  • getopt() - コマンドライン引数のリストからオプションを取得する

add a note add a note

User Contributed Notes 7 notes

up
46
tufan dot oezduman at googlemail dot com
5 years ago
Please note that, $argv and $argc need to be declared global, while trying to access within a class method.

<?php
class A
{
    public static function
b()
    {
       
var_dump($argv);
       
var_dump(isset($argv));
    }
}

A::b();
?>

will output NULL bool(false)  with a notice of "Undefined variable ..."

whereas global $argv fixes that.
up
22
hamboy75 at example dot com
2 years ago
To use $_GET so you dont need to support both if it could be used from command line and from web browser.

foreach ($argv as $arg) {
    $e=explode("=",$arg);
    if(count($e)==2)
        $_GET[$e[0]]=$e[1];
    else   
        $_GET[$e[0]]=0;
}
up
1
php at simoneast dot net
9 months ago
Sometimes $argv can be null, such as when "register-argc-argv" is set to false.  In some cases I've found the variable is populated correctly when running "php-cli" instead of just "php" from the command line (or cron).
up
1
Steve Schmitt
6 years ago
If you come from a shell scripting background, you might expect to find this topic under the heading "positional parameters".
up
-4
fabio at naoimporta dot com
6 months ago
When you pass an option to the file that intercept the request, it will be transformed into an array item, and the option name will be lost. Only its content is captured.

<?php
    var_dump
($argv);
?>

call  :  "php file.php --test=foo baz"

will print

array(3) {
  [0] =>
  string(16) "file.php"
  [1] =>
  string(3) "foo"
  [2] =>
  string(3) "baz"
}
up
-7
KRowe
1 year ago
Improves on hamboy75's note by providing better support for positional arguments:

    foreach ($argv as $arg) {
         $e=explode("=",$arg);
        if(count($e)==2)
            $_GET[$e[0]]=$e[1];
        else   
            $_GET[]=$e[0];
    }

    var_dump($_GET);

Using this modification, arguments without an = are treated as positional (this is not web standard but generally works).
up
-60
Jesse
3 years ago
If your script is read from standard input or with the -r option, $argv[0] will be "-".

If you use the "--" option to separate PHP's arguments from your script's arguments, $argv[1] will be "--" if your script is read from a file. But if your script is read from standard input or with the -r option, the "--" will be removed.
To Top