PHP で getopt を使用して GNU C スタイルのコマンドライン オプションを解析する方法

藏色散人
リリース: 2023-04-07 21:50:02
転載
2315 人が閲覧しました

PHP では、コマンド ライン パラメータを取得する場合、$argv をトラバースすることで取得できます。実際には、コマンド ライン オプション用の GNU C スタイル パーサーに従うべき仕様があります。

たとえば、wget コマンドを使用してファイルをダウンロードする場合、次のいくつかの方法を使用してオプションを指定できます

wget http://mengkang.net/a.jpg -O b.jpg
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -b
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -bvd
ログイン後にコピー

コマンド ライン オプションの規則を整理しましょう。パラメータは短いパラメータ名と完全なパラメータ名に分かれており、マッピング関係を持つものもあります。たとえば、wget を使用する場合、-O は --output-document に対応します。

サマリー オプションの使用仕様

● 短いオプション名には制限があり、文字は 1 バイトのみ、1 文字を超えることはできません。たとえば、上記の 4 番目のコマンドの最後のパラメータが 1 つのオプションであるか、3 つのオプションであるかは不明です。

# 短いオプション名は 1 つのハイフン (-) で始まります

#● 短いオプションは 1 つで、その後に複数のオプション名が続きます

#● 長いオプションと短いオプションには、次の名前を付けることができますマッピング関係は存在しない可能性があります。

# 長いオプション名は 2 つのハイフン (--) で始まるマルチバイトです。

# オプションと実際のパラメータの間では、直接接続することもできます。スペースで区切ることも、等号を使用して接続することもできます

# ただし、短いオプションでは等号を使用して値を接続し、等号は値の一部とみなされます (ただし、等号は値の一部とみなされます)。 PHPではこれ) ワンポイント)

# オプションは、値なし、値を渡す必要がある、値を渡してもよい(つまり、渡しても渡してもよい)に分かれています

PHP

getopt ( string $options [, array $longopts [, int &$optind ]] ) : array
https://www.php.net/manual/zh/function.getopt.php
ログイン後にコピー
$options で使用する短いパラメータ文字リスト。パラメータ文字の後には値を渡す必要があることを示す : が続きます。パラメータ文字の後にはオプションの値を示す :: が続きます。パラメータのみです。文字は、パラメータ (またはオプション) が値の受け渡しを受け付けないことを示します

$longopts 長いパラメータはマルチバイトであるため、配列でなければなりません。それ以外の場合は分離できません。長いパラメータも上記::,: ルールに従います

php には構造体のサポートがありません。c の長いオプション設定と比較するとより簡潔ですが、long と short のマッピング関係の設定もありません。オプション。

$shortOpts = "O:Vv::dh";
$longOpts = ["output-document:","version","verbose::", "debug", "help"]; 
$options = getopt($shortOpts, $longOpts);
var_export($options);
php getopt.php -Oa.jpg 
array (
  'O' => 'a.jpg',
)
php getopt.php -O=a.jpg
array (
  'O' => 'a.jpg',
)
php getopt.php -O a.jpg                                 
array (
  'O' => 'a.jpg',
)
php getopt.php -O=a.jpg -dhV
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'V' => false,
)
php getopt.php -O=a.jpg -dhV -vvv
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'V' => false,
  'v' => 'vv',
)
ログイン後にコピー

上の例では、短いパラメーターと長いパラメーターは対応していますが、それらの対応を表すデータ構造がありません (この対応を管理するための C のオプション構造があります)。そのため、両方が渡された場合、の場合、プログラムは両方の値を受け取り、短いパラメータまたは長いパラメータにどちらを使用するかを決定できます。

php getopt.php -O=a.jpg -dhV -vvv --output-document b.jpg --debug
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'V' => false,
  'v' => 'vv',
  'output-document' => 'b.jpg',
  'debug' => false,
)
ログイン後にコピー

このような書き方は標準化されていないため、このような書き方は避けてください。

php getopt.php -O=a.jpg -dhVvvv  
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'V' => false,
  'v' => 'vv',
)
php getopt.php -O=a.jpg -dhvvvV
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'v' => 'vvV',
)
ログイン後にコピー

GNU C コマンド ライン オプションで使用されるルーチンをまとめています。コマンドはより使いやすくなっています。Linux でさまざまなツールを使用するケースがなぜ「奇妙な」方法で記述されているかについて混乱することはなくなります。

C では、短いオプションと値を等号で接続することはサポートされていませんが、PHP では可能です。

111


推奨: 「
PHP チュートリアル

以上がPHP で getopt を使用して GNU C スタイルのコマンドライン オプションを解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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