• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP中通过getopt解析GNU C风格命令行选项

    在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv来获取,其实呢是有规范可循的,也就是 GNU C-style parser for command line options 。

    比如使用命令wget下载文件时,使用下面的一些方式来指定option都可以

    wget http://mengkang.net/a.jpg -O b.jpg
    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

    我们整理下command line options的规则,首先参数分为短参数名和完整参数名,而且一些还有映射关系。比如我们使用wget时,-O对应--output-document。

    总结 options 使用规范

    在 PHP 中的使用

    getopt ( string $options [, array $longopts [, int $optind ]] ) : array

    https://www.php.net/manual/zh/function.getopt.php

    $options 短参数字符列表,参数字符后面用:标识必须传值;参数字符后面用::标识可选传值;只有参数字符表示该参数(或者说选项)不接受传值

    $longopts 长参数由于是多字节,所以必须是数组,否则没法分隔。长参数同样遵循上面::、:规则

    php里面缺少结构体的支撑,相比c的长选项的配置更加简洁,但也缺少了长短选项的映射关系配置。

    $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里面有option结构体来做这个对应关系的管理),所以我们两个都传的话,程序两个值会收到,然后我们自己判断短参数和长参数使用哪个。

    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 command line options 使用的套路,命令使用起来就更溜了,不会懵逼为什么linux下各种工具使用的案例写法“千奇百怪”了。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • ThinkPHP3.1.2 使用cli命令行模式运行的方法
    • php web环境和命令行环境下查找php.ini的位置
    • php根据命令行参数生成配置文件详解
    • php命令行写shell实例详解
    • php命令行模式代码实例详解
    上一篇:php 多继承的几种常见实现方法示例
    下一篇:php 使用 __call实现重载功能示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP中通过getopt解析GNU C风格命令行选项 PHP,中,通过,getopt,解析,GNU,