ホームページ > バックエンド開発 > PHPチュートリアル > CLIモードでPHPのパラメータを取得する方法

CLIモードでPHPのパラメータを取得する方法

墨辰丷
リリース: 2023-03-27 15:22:01
オリジナル
1985 人が閲覧しました

この記事では参考値が良いphp cliモードでパラメータを取得する方法を中心に紹介します。以下のエディターで見てみましょう

PHP が cli モードでパラメータを受け取るには 2 つの方法があります

1. argv 配列を使用します

2. getopt メソッドを使用します

1. argv 配列を使用します

例: PHP を実行し、3 つのパラメータ (type=news、is_hot=1、limit=5) を渡す必要があります

test.php を作成します

<?php
print_r($argv);
?>
ログイン後にコピー

コマンドラインで

php test.php news 1 5 を実行します

php test.php news 1 5

输出:

Array
(
  [0] => test.php
  [1] => news
  [2] => 1
  [3] => 5
)
ログイン後にコピー

可以看到argv[0]为当前执行的php文件名称,而argv[1]~argv[3]则是传递的参数的值

argv[1]等于type的值

argv[2]等于is_hot的值

argv[3]等于limit的值

这样可以根据argv数组来获取传递的参数进行后续的处理操作。

缺点:

使用argv数组,可以按顺序获取传递的参数。但获取后,需要做一个对应处理,上例中需要把argv[1]对应type参数,argv[2]对应is_hot参数,argv[3]对应limit参数。而如果在传递的过程中,参数顺序写错,则会导致程序出错。

例如:

<?php
$param = array();
$param[&#39;type&#39;] = $argv[1];
$param[&#39;is_hot&#39;] = $argv[2];
$param[&#39;limit&#39;] = $argv[3];
print_r($param);
?>
ログイン後にコピー

执行

php test.php news 1 5

输出:

Array
(
  [type] => news
  [is_hot] => 1
  [limit] => 5
)
ログイン後にコピー

而传递顺序不同,获取到的参数数值会不同,导致后续程序出错

执行

php test.php 1 5 news

输出:

Array
(
  [type] => 1
  [is_hot] => 5
  [limit] => news
)
ログイン後にコピー

因此在使用argv数组传递参数时,需要注意参数传递的顺序。

2.使用getopt方法

getopt 从命令行参数列表中获取选项

array getopt ( string $options [, array $longopts ] )

参数:

options

该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符(-)开头。 比如,一个选项字符串 “x” 识别了一个选项 -x。 只允许 a-z、A-Z 和 0-9。

longopts

选项数组。此数组中的每个元素会被作为选项字符串,匹配了以两个连字符(–)传入到脚本的选项。 例如,长选项元素 “opt” 识别了一个选项 –opt。

options 可能包含了以下元素:

单独的字符(不接受值)

后面跟随冒号的字符(此选项需要值)

后面跟随两个冒号的字符(此选项的值可选)

选项的值是字符串后的第一个参数。它不介意值之前是否有空格。

options 和 longopts 的格式几乎是一样的,唯一的不同之处是 longopts 需要是选项的数组(每个元素为一个选项),而 options 需要一个字符串(每个字符是个选项)。

传值的分隔符可以使用空格或=。

可选项的值不接受空格作为分隔符,只能使用=作为分隔符。

返回值

此函数会返回选项/参数对,失败时返回 FALSE。

选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。

1.使用options实例

a,b,c 为需要值

d 为可选值

e 为不接受值

<?php
$param = getopt(&#39;a:b:c:d::e&#39;);
print_r($param);
?>
ログイン後にコピー

执行

php test.php -a 1 -b 2 -c 3 -d=4 -e 5

输出:

Array
(
  [a] => 1
  [b] => 2
  [c] => 3
  [d] => 4
  [e] => 
)
ログイン後にコピー

2.使用longopts实例

type,is_hot 为需要值

limit 为可选值

expire 为不接受值

<?php
$longopt = array(
  &#39;type:&#39;,
  &#39;is_hot:&#39;,
  &#39;limit::&#39;,
  &#39;expire&#39;
);
$param = getopt(&#39;&#39;, $longopt);
print_r($param);
?>
ログイン後にコピー
ログイン後にコピー

执行

php test.php --type news --is_hot 1 --limit=10 --expire=100

输出:

Array
(
  [type] => news
  [is_hot] => 1
  [limit] => 10
  [expire] => 
)
ログイン後にコピー

3.找到第一非选项,后面忽略实例

<?php
$longopt = array(
  &#39;type:&#39;,
  &#39;is_hot:&#39;,
  &#39;limit::&#39;,
  &#39;expire&#39;
);
$param = getopt(&#39;&#39;, $longopt);
print_r($param);
?>
ログイン後にコピー
ログイン後にコピー

执行

php test.php --type news --is_hots 1 --limit=10 --expire=100出力:

Array
(
  [type] => news
)
ログイン後にコピー

argv[0] が現在実行されている php ファイルの名前であることがわかります。 、および argv[1]~argv [3] 渡されたパラメータの値

argv[1] は type の値と等しい

argv[2] は is_hot の値と等しい argv[3] は制限の値に等しい

このようにして、後続の処理操作の argv 配列パラメーターに基づいて転送を取得できます。

🎜🎜🎜短所: 🎜🎜🎜🎜 argv配列を使用すると、渡されたパラメータを順番に取得できます。ただし、取得後に対応する処理を行う必要があります。上記の例では、argv[1]がtypeパラメータ、argv[2]がis_hotパラメータ、argv[3]がlimitパラメータに対応する必要があります。 。また、転送処理中にパラメータを間違った順序で書き込むと、プログラムエラーが発生します。 🎜🎜例: 🎜🎜🎜rrreee🎜🎜🎜🎜🎜php test.php news 1 5を実行🎜🎜出力: 🎜🎜🎜rrreee🎜🎜🎜🎜ただし、渡す順序が異なり、取得されるパラメータ値は異なるため、後続のプログラム エラーが発生します🎜🎜🎜Execution🎜🎜php test.php 1 5 news🎜🎜Output:🎜🎜🎜rrreee🎜🎜🎜🎜 argv 配列を使用してパラメータを渡す場合は、パラメータが渡される順序に注意する必要があります。 🎜🎜🎜🎜🎜2. getopt メソッド 🎜🎜🎜🎜getopt を使用してコマンドライン引数リストからオプションを取得します🎜🎜array getopt ( string $options [, array $longopts ] )🎜🎜🎜 パラメータ: 🎜🎜🎜🎜🎜🎜options 🎜🎜🎜🎜 この文字列内の各文字は、単一のハイフン (-) で始まるオプション文字として扱われます。 。 たとえば、オプション文字列「x」はオプション -x を識別します。 a ~ z、A ~ Z、0 ~ 9 のみが許可されます。 🎜🎜🎜🎜longopts 🎜🎜🎜🎜オプション配列。この配列内の各要素はオプション文字列として扱われ、スクリプトに渡されたオプションと 2 つのハイフン (-) を組み合わせて照合されます。 たとえば、長いオプション要素「opt」はオプション -opt を識別します。 🎜🎜🎜オプションには次の要素が含まれる場合があります: 🎜🎜🎜🎜 単一の文字 (値は受け入れられません) 🎜🎜 コロンが後に続く文字 (このオプションには値が必要です) 🎜🎜 の後に 2 つのコロン文字が続きます (このオプションの値はオプションです) 🎜🎜 オプションの値は、文字列の後の最初のパラメータです。値の前にスペースがあっても問題ありません。 🎜🎜 options と longopts の形式はほぼ同じですが、唯一の違いは、longopts はオプションの配列 (各要素がオプション) である必要があるのに対し、options は文字列 (各文字がオプション) である必要があることです。 🎜🎜🎜渡される値の区切り文字にはスペースまたは=を使用できます。 🎜🎜🎜🎜オプションの値は区切り文字としてスペースを受け入れません。区切り文字として使用できるのは = のみです。 🎜🎜🎜戻り値🎜🎜この関数はオプションとパラメータのペアを返し、失敗した場合は FALSE を返します。 🎜🎜オプションの解析は、最初に見つかった非オプションで終了し、それ以降のものはすべて破棄されます。 🎜🎜🎜1. オプション インスタンスを使用します🎜🎜🎜🎜a、b、c は必須の値です🎜🎜d はオプションの値です🎜🎜e は受け入れられない値です🎜🎜🎜rrreee🎜 🎜🎜Execute🎜🎜php test.php -a 1 -b 2 -c 3 -d=4 -e 5🎜🎜出力: 🎜🎜🎜rrreee🎜🎜🎜🎜2. longopts インスタンスを使用します 🎜🎜🎜🎜type、is_hot は必須の値です 🎜🎜limit はオプションの値です 🎜🎜expire は受け入れられない値 🎜🎜🎜rrreee🎜🎜🎜 🎜🎜php テスト。php --type news --is_hot 1 --limit=10 --expire=100🎜🎜出力: 🎜🎜🎜rrreee🎜🎜🎜🎜 3. 3. 1 つの非オプションを見つけます。次の例は無視してください🎜🎜🎜🎜🎜rrreee🎜🎜🎜Execution🎜🎜php test.php --type news --is_hots 1 --limit=10 --expire =100🎜🎜 出力: 🎜🎜🎜rrreee🎜🎜🎜 is_hots はオプション値ではない (is_hot が定義されている) ため、これ以降のパラメータは破棄されます。 🎜🎜🎜概要: 🎜🎜🎜 argv 配列を使用してパラメータを渡します。このメソッドはシンプルで実装が簡単です。パラメータの順序を間違えることはできず、パラメータを取得した後に対応する処理を行う必要があります。 🎜

getopt メソッドを使用すると、パラメーター名を使用でき、パラメーターの順序も任意にでき、比較的標準化されています。 (推奨)

関連する推奨事項:

PHP浮動小数点計算の比較とrounding_phpの基礎に対する不正確な解決策

PHPファイルのメインコードの説明upload_phpの基礎

phpシンプルオンラインの人数を数える方法_phpスキル

以上がCLIモードでPHPのパラメータを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート