10

この質問は、php の getopt 関数に関するものです。次のようなphpスクリプトに2つのパラメーターを渡す必要があります

php script.php -f filename -t filetype

u、c、またはsのファイルタイプに応じて、適切な操作を行う必要があります。

同じためにスイッチケースを使用しています:

私が使用しているコードは次のとおりです。

// Get filename of input file when executing through command line.
$file = getopt("f:t:");

大文字と小文字を切り替えるには、コマンド ラインから渡すファイルのタイプ (u、c、または i) を比較し、それに応じて一致させて操作を実行する必要があります。

switch("I am not sure what should go in there and this is wrong,Please advice")
    {

        case `Not sure`:
            $p->ini();
            break;

        case `Not sure`:
            $p->iniCon();
            break;

        case `Not sure`:
            $p->iniImp();
            break;
    }

これについて親切にアドバイスしてください!!!

4

4 に答える 4

19

PHPスクリプトに次のようなものを入れると(私のマシンでは、と呼ばれますtemp.php

<?php
$file = getopt("f:t:");
var_dump($file);

コマンドラインから呼び出して、これらの 2 つのパラメーターを渡します。

php temp.php -f filename -t filetype

このような出力が得られます:

array(2) {
  ["f"]=>
  string(8) "filename"
  ["t"]=>
  string(8) "filetype"
}

つまり、次のことを意味します。

  • $file['f']渡された値を含む-f
  • 渡され$file['t']た値が含まれています-t


switchそこから始めて、 の値として渡されたオプションに依存さ せたい場合は-t、次のようなものを使用します。

switch ($file['t']) {
    case 'u':
            // ...
        break;
    case 'c':
            // ...
        break;
    case 'i':
            // ...
        break;
}

基本的に、あなたは入れます:

  • でテストする変数switch()
  • caseおよびs の可能な値


詳細については、PHP マニュアルを参照してください。

于 2010-03-11T17:28:04.453 に答える
8

このために getopt パーサーを実装し、短いオプション名、長いオプション名、型の制約、オプションの印刷などをサポートしています。このライブラリは 6 年以上維持されています。

あらすじ:

<?php

use GetOptionKit\OptionCollection;
use GetOptionKit\OptionParser;

$options = new OptionCollection;
$spec = $options->add( 'f|foo:' , 'option require value' );  # returns spec object.

$options->add( 'b|bar+' , 'option with multiple value' );
$options->add( 'z|zoo?' , 'option with optional value' );

$options->add( 'f|foo:=i' , 'option require value, with integer type' );
$options->add( 'f|foo:=s' , 'option require value, with string type' );

$options->add( 'v|verbose' , 'verbose flag' );
$options->add( 'd|debug'   , 'debug flag' );

$parser = new OptionParser;
$result = $parser->parse( array( 'program' , '-f' , 'foo value' , '-v' , '-d' ) );

$result = $parser->parse( $argv );

$spec = $result->verbose;
$spec = $result->debug;
$spec->value;  # get value

GetOptionKit\OptionPrinter は、オプションを印刷できます。

* Available options:
              -f, --foo   option requires a value.
              -b, --bar   option with multiple value.
              -z, --zoo   option with optional value.
          -v, --verbose   verbose message.
            -d, --debug   debug message.
                 --long   long option name only.
                     -s   short option name only.

デモ

チェックしてくださいexamples/demo.php

走る:

% php examples/demo.php -f test -b 123 -b 333

印刷:

* Available options:
      -f, --foo <value>    option requires a value.
     -b, --bar <value>+    option with multiple value.
    -z, --zoo [<value>]    option with optional value.
          -v, --verbose    verbose message.
            -d, --debug    debug message.
                 --long    long option name only.
                     -s    short option name only.
Enabled options: 
* key:foo      spec:-f, --foo <value>  desc:option requires a value.
    value => test

* key:bar      spec:-b, --bar <value>+  desc:option with multiple value.
    Array
    (
        [0] => 123
        [1] => 333
    )

GetOptionKit は GitHub にあります: https://github.com/c9s/GetOptionKit

于 2011-11-29T06:02:08.583 に答える
0

あなたのアプローチには問題があります。ユーザーが誤って次のコマンド ラインを指定した場合はどうなりますか。スクリプトはそれを検出できず$file['t']、配列と同様に失敗します。

php temp.php -f filename -t filetype -f filename2
于 2010-08-19T21:18:57.180 に答える
0
<?php
$file = getopt("f:t:");
var_dump($file);
$f = file($file['f']);
var_dump($f);
?>

#php file.php -f filename.txt 入力ファイルを読み取ります

于 2021-05-25T04:34:12.043 に答える