PHP CLI コマンド ラインでは、Web ページ上の GET や POST などのコマンド ライン スクリプトのパラメータを指定する必要があります。では、これらのコマンド ライン パラメータを取得するにはどうすればよいでしょうか?次の記事では、PHP でコマンド ライン パラメーターを取得する方法を示し、$argv 変数と getopt() 関数を紹介します。
この変数は、おそらく誰もがよく使用するアクセス パラメータ変数です。頻繁。 。これは、スクリプトに渡されるパラメータ配列を取得するために PHP によって用意される固定変数です。
print_r($argv); // php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd // Array // ( // [0] => 如何获取PHP命令行参数.php // [1] => --a=1 // [2] => -b=2 // [3] => -c=3 // [4] => -d=4 // [5] => --e=5 // [6] => ccc // [7] => ddd // )
この配列はパラメータ間をスペースで区切ります。最初の要素は現在実行中のスクリプト ファイルの名前です。つまり、パラメータの有無に関係なく、この変数には現在のスクリプト ファイル名を表す $argv[0] が必要です。
日常の開発ニーズでは、実際にはこの変数を使用するだけで十分です。しかし、これは明らかに今日のトピックではありません。上記のコードには、-x=xxx の形式で多くのパラメータがあることに誰もが気づきました。この形式のパラメータは Linux コマンド オプションに非常に似ていますか? はい、これが私たちがやろうとしていることです今日はコマンドライン引数リストからオプションを取得することに焦点を当てます。
実際、これは非常に単純な関数であり、Linux コマンドオプションと同じように指定されたコマンドを取得できます。価値。また、$argv のようにスペースで区切る代わりに、コマンド オプション関数はこれらのコマンド オプションを配列にカプセル化し、オプション名をキー、等号の後の内容を値として持つ配列を形成します。これは、私たちが使うのです。
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:')); // Array // ( // [b] => 2 // [c] => 3 // [d] => 4 // )
これは素晴らしく、非常に直観的だと思いませんか? b、c、d の内容を、非常に明確な形式のキーと値の配列の形式で直接取得しました。 「a と e はどこですか?」と尋ねたい生徒もいます。後ろのcccとdddはどうでしょうか?
最初に注意すべきことは、ccc と ddd は標準のオプションパラメータではないということです。つまり、この関数が受け取る内容は - で始まるオプションなので、ここでは ccc と ddd は出力されません。残念ながら、オプション以外のパラメータはオプションパラメータの取得を中断します。ccc の後に - で始まるオプションを追加し続けると、それらを取得できなくなります。これについては後ほど説明します。 -- で始まるオプション パラメータはどうなるでしょうか?以下の長いオプション関数を直接見てみましょう。
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [e] => 5 // )
はい、getopt() 関数の 2 番目のパラメーターは、この種の長いオプションを最初に定義するものであり、次のことに注意してください。 、最初のパラメータは文字列型で、2 番目の長いオプション パラメータは配列型です。もちろんそれらを組み合わせれば、すべてのパラメータ情報を取得できます。
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // [d] => 4 // [e] => 5 // )
OK, パラメータ オプションの取得に問題はありません。注意深い学生は別の問題を発見したはずです。getopt() 関数のパラメータで定義されたオプション名の後にコロンがあるのはなぜですか?これにはコロンのルールが関係します。以下を直接読んでください。
getopt() の最初の 2 つのパラメータは、オプション取得のための一連のルールをサポートします。
コードを直接見てみましょう。
// 一 // php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('abcdef')); // Array // ( // [b] => // [c] => // [d] => // ) // 二 // php 如何获取PHP命令行参数.php -f print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // ) // 三 // php 如何获取PHP命令行参数.php -f 22 print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // ) // 四 // php 如何获取PHP命令行参数.php -f=22 print_r(getopt('f::')); // Array // ( // [f] => 22 // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // )
この段落は比較的長いので、一つずつ見ていきましょう。 1 つ目はコロンなしの abcdef です。返された配列にはキーが含まれていますが、値は含まれていません。上記のルールに対応して、これらのパラメーター オプションの値は受け入れられません。これらのパラメーター オプションを渡すと、キー名と空の内容のみが含まれます。
2 番目の段落ではパラメータを定義していますが、値を指定していません。このとき、二重コロン :: にはキー名が付きますが、単一コロン : には何もありません。
3 番目の段落はスペース形式のオプション値です 二重コロン:: キー名はありますが値がありません 単一コロン: キーの値は通常です。
4 番目の段落は、等号 = の形式のオプション値です。通常、単一コロンと二重コロンの両方がキー値を受け取ります。
パラメータの中断の問題については上で説明しました。つまり、オプション パラメータの後に非オプション パラメータのパラメータが現れた場合、getopt() Allこの非オプションパラメータに続くコンテンツは取得できなくなります。
// php 如何获取PHP命令行参数.php -f=22 aa -b=33 // 选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。 // Array // ( // [f] => 22 // )
このテストを通じて、次の b オプションを取得できないことが明確にわかります。このとき、オプションパラメータがどこにあるのか、またはどのパラメータが中断されているのかを知りたい場合は、getopt()関数の3番目のパラメータを使用できます。
// php 如何获取PHP命令行参数.php -f=22 aa -b=33 $optind = null; getopt('f:b:', [], $optind); echo $optind, PHP_EOL; // 返回中断位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引顺序,aa
コメントは非常にわかりやすく書かれており、3 番目のパラメータはパラメータ オプションの中断位置のインデックスをコールバックしますが、このインデックスは $argv のインデックス シーケンスの位置と一致します。
正直に言うと、ドキュメントを読む前は、コマンドのパラメーターを取得するために使用できる $argv 変数があることしか知りませんでした。 line スクリプト. 今回の調査を通じて、このような強力なオプションパラメータ関数があることを初めて知りました。学習プロセスは非常にシンプルですが、それを実際のプロジェクトにどのように適用するかが鍵となりますので、しっかりと勉強して練習してください。
测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php
推荐学习:《PHP视频教程》
以上がPHP でコマンドラインパラメータを取得する方法についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。