Question

Cette question concerne la fonction getopt en php. Je dois passer deux paramètres aux scripts php comme

php script.php -f filename -t filetype

Maintenant, en fonction du type de fichier qui peut être u, c ou s que je dois faire le bon fonctionnement.

J'utilise le cas de commutation pour le même:

Voici le code que je me sers:

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

boîtier de commutateur doit comparer le type de fichier qui je passe à partir de la ligne de commande (u, c ou i) et faire correspondre en conséquence et effectuer l'opération.

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

vous prie de nous sur ce !!!

Était-ce utile?

La solution

Si vous venez de mettre quelque chose comme ça dans votre script PHP (appelé, sur ma machine, temp.php) :

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

Et appeler à partir de la ligne de commande, en passant ces deux paramètres:

php temp.php -f filename -t filetype

Vous obtiendrez ce genre de sortie:

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

Ce qui signifie que:

  • $file['f'] contient la valeur passée pour -f
  • et $file['t'] contient la valeur passée pour -t


A partir de là, si vous voulez que votre switch dépendre de l'option passée en tant que valeur de -t, vous utiliserez quelque chose comme ceci:

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

En gros, vous mettez:

  • La variable que vous voulez tester dans le switch()
  • Et les valeurs possibles dans les cases


Et, pour plus d'informations, vous pouvez lire, dans le manuel PHP:

Autres conseils

Je mis en place un analyseur getopt pour cela, un soutien à court, noms long option, contrainte de type, impression option .. etc, et cette bibliothèque a été maintenue pendant 6 ans.

Synopsis:

<?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 peut imprimer des options pour vous:

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

Démo

S'il vous plaît vérifier examples/demo.php.

Exécuter:

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

Imprimer:

* 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 est sur GitHub: https://github.com/c9s/GetOptionKit

Il y a un problème dans votre approche. Et si l'utilisateur donne la ligne de commande suivante par erreur. le script ne sera pas en mesure de détecter et d'échouer comme $file['t'] sera un tableau.

php temp.php -f filename -t filetype -f filename2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top