首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP getopt操作

PHP getopt操作
EN

Stack Overflow用户
提问于 2010-03-12 01:22:56
回答 4查看 23.5K关注 0票数 10

这个问题是关于php中的getopt函数的。我需要向php脚本传递两个参数,例如

代码语言:javascript
复制
php script.php -f filename -t filetype

现在,根据文件类型,可以是u、c或s,我需要进行适当的操作。

我使用switch case来做同样的事情:

下面是我使用的代码:

代码语言:javascript
复制
// Get filename of input file when executing through command line.
$file = getopt("f:t:");

切换大小写应该比较我从命令行传入的文件的类型(u、c或i),并相应地匹配它并执行操作。

代码语言:javascript
复制
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;
    }

敬请指教!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-12 01:28:04

如果您只是在您的PHP脚本(在我的机器上称为temp.php__)中放入如下内容:

代码语言:javascript
复制
<?php
$file = getopt("f:t:");
var_dump($file);

并从命令行调用它,传递这两个参数:

代码语言:javascript
复制
php temp.php -f filename -t filetype

你会得到这样的输出:

代码语言:javascript
复制
array(2) {
  ["f"]=>
  string(8) "filename"
  ["t"]=>
  string(8) "filetype"
}

这意味着:

  • $file['f']包含为-f
  • and传递的值$file['t']包含为-t

传递的值

从那里开始,如果您希望switch依赖于作为-t的值传递的选项,您将使用类似以下内容:

代码语言:javascript
复制
switch ($file['t']) {
    case 'u':
            // ...
        break;
    case 'c':
            // ...
        break;
    case 'i':
            // ...
        break;
}

基本上,你把:

要在switch()

  • And中测试cases

中的可能值的变量的

有关更多信息,请阅读PHP手册中的:

manual page of switch

  • And getopt()

票数 19
EN

Stack Overflow用户

发布于 2011-11-29 14:02:09

我为此实现了一个getopt解析器,支持短的、长的选项名称、类型约束、选项打印。等,这个库已经维护了6年多。

简介:

代码语言:javascript
复制
<?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可以为您打印选项:

代码语言:javascript
复制
* 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

运行:

代码语言:javascript
复制
% php examples/demo.php -f test -b 123 -b 333

打印:

代码语言:javascript
复制
* 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

票数 8
EN

Stack Overflow用户

发布于 2010-08-20 05:18:57

你的方法有问题。如果用户错误地给出了下面的命令行怎么办。脚本将无法检测到它并失败,因为$file['t']将是一个数组。

代码语言:javascript
复制
php temp.php -f filename -t filetype -f filename2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2427176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档