PHP getopt İşlemleri

3 Cevap php

Bu soru php getopt fonksiyonu ile ilgili. Ben gibi php komut iki parametre geçmek gerekir

php script.php -f filename -t filetype

Şimdi u olabilir dosya türüne bağlı olarak, c ya da s ben düzgün çalışmasını yapmak gerekir.

Ben aynı için switch case kullanıyorum:

İşte ben kullanıyorum Code:

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

Anahtarı vaka Ben komut satırından (u, c ya da i) den geçen ve ona göre maç ve operasyon yapacağım dosya türünü karşılaştırmak gerekir.

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;
    }

Lütfen bu konuda tavsiye!

3 Cevap

Eğer sadece PHP komut böyle bir şey koyarsanız (called, on my machine, temp.php) :

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

Ve bu iki parametre geçirerek, komut satırından çağırır:

php temp.php -f filename -t filetype

Siz çıktı bu tür alırsınız:

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

Bu da şu anlama gelir:

  • $file['f'] ihtiva -f için iletilen değer
  • ve $file['t'] -t için iletilen değeri içerir


Starting from there, if you want your switch to depend on the option passed as the value of -t, you'll use something like this :

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

Temelde, koymak:

  • Eğer switch() sınamak istediğiniz değişkeni
  • Ve case s olası değerler


And, for more informations, you can read, in the PHP manual :

Biz, bunun için bir getopt ayrıştırıcı uygulamak vb kısa, uzun seçenek isimlerini, tipi kısıtlaması, seçenek yazdırmayı .. destek

Blog post about this: http://c9s.blogspot.com/2011/11/php-getoptionkit.html

Bazı özet:

Özet:

<?php

use GetOptionKit\GetOptionKit;

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

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

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

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

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

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

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

GetOptionKit \ OptionPrinter sizin için seçenekleri yazdırabilirsiniz:

* 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.

Demo

Kontrol edin examples/demo.php.

Çalıştırın:

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

Baskı:

* 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
    )

https://github.com/c9s/php-GetOptionKit: GetOptionKit GitHub üzerinde

Yaklaşım bir sorun var. Ne kullanıcı yanlışlıkla komut satırı aşağıdaki verirse. komut algılar ve $file['t'] bir dizi olacak gibi başarısız mümkün olmayacaktır.

php temp.php -f filename -t filetype -f filename2