php cli模式下获取参数的方法


Posted in PHP onMay 05, 2017

PHP在cli模式下接收参数有两种方法

1.使用argv数组

2.使用getopt方法

1.使用argv数组

例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, limit=5)

创建test.php

<?php
print_r($argv);
?>

在命令行执行

php test.php news 1 5

输出:

Array
(
  [0] => test.php
  [1] => news
  [2] => 1
  [3] => 5
)

可以看到argv[0]为当前执行的php文件名称,而argv[1]~argv[3]则是传递的参数的值

argv[1]等于type的值

argv[2]等于is_hot的值

argv[3]等于limit的值

这样可以根据argv数组来获取传递的参数进行后续的处理操作。

缺点:

使用argv数组,可以按顺序获取传递的参数。但获取后,需要做一个对应处理,上例中需要把argv[1]对应type参数,argv[2]对应is_hot参数,argv[3]对应limit参数。而如果在传递的过程中,参数顺序写错,则会导致程序出错。

例如:

<?php
$param = array();
$param['type'] = $argv[1];
$param['is_hot'] = $argv[2];
$param['limit'] = $argv[3];
print_r($param);
?>

执行

php test.php news 1 5

输出:

Array
(
  [type] => news
  [is_hot] => 1
  [limit] => 5
)

而传递顺序不同,获取到的参数数值会不同,导致后续程序出错

执行

php test.php 1 5 news

输出:

Array
(
  [type] => 1
  [is_hot] => 5
  [limit] => news
)

因此在使用argv数组传递参数时,需要注意参数传递的顺序。

2.使用getopt方法

getopt 从命令行参数列表中获取选项

array getopt ( string $options [, array $longopts ] )

参数:

options

该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符(-)开头。 比如,一个选项字符串 “x” 识别了一个选项 -x。 只允许 a-z、A-Z 和 0-9。

longopts

选项数组。此数组中的每个元素会被作为选项字符串,匹配了以两个连字符(?)传入到脚本的选项。 例如,长选项元素 “opt” 识别了一个选项 ?opt。

options 可能包含了以下元素:

单独的字符(不接受值)

后面跟随冒号的字符(此选项需要值)

后面跟随两个冒号的字符(此选项的值可选)

选项的值是字符串后的第一个参数。它不介意值之前是否有空格。

options 和 longopts 的格式几乎是一样的,唯一的不同之处是 longopts 需要是选项的数组(每个元素为一个选项),而 options 需要一个字符串(每个字符是个选项)。

传值的分隔符可以使用空格或=。

可选项的值不接受空格作为分隔符,只能使用=作为分隔符。

返回值

此函数会返回选项/参数对,失败时返回 FALSE。

选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。

1.使用options实例

a,b,c 为需要值

d 为可选值

e 为不接受值

<?php
$param = getopt('a:b:c:d::e');
print_r($param);
?>

执行

php test.php -a 1 -b 2 -c 3 -d=4 -e 5

输出:

Array
(
  [a] => 1
  [b] => 2
  [c] => 3
  [d] => 4
  [e] => 
)

2.使用longopts实例

type,is_hot 为需要值

limit 为可选值

expire 为不接受值

<?php
$longopt = array(
  'type:',
  'is_hot:',
  'limit::',
  'expire'
);
$param = getopt('', $longopt);
print_r($param);
?>

执行

php test.php --type news --is_hot 1 --limit=10 --expire=100

输出:

Array
(
  [type] => news
  [is_hot] => 1
  [limit] => 10
  [expire] => 
)

3.找到第一非选项,后面忽略实例

<?php
$longopt = array(
  'type:',
  'is_hot:',
  'limit::',
  'expire'
);
$param = getopt('', $longopt);
print_r($param);
?>

执行

php test.php --type news --is_hots 1 --limit=10 --expire=100

输出:

Array
(
  [type] => news
)

因为is_hots不是选项值(定义的是is_hot),所以从这里开始之后的参数,都被丢弃。

总结:

使用argv数组传参数,方法简单,实现方便。参数的顺序不能错,参数获取后需要做对应处理。

使用getopt方法,可使用参数名,参数顺序可随意,比较规范。(建议使用)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
php文件上传简单实现方法
Jan 24 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 #PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 #PHP
PHP实现Session入库/存入redis的方法
May 04 #PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 #PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 #PHP
PHP调用Mailgun发送邮件的方法
May 04 #PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 #PHP
You might like
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
python调用windows api锁定计算机示例
2014/04/17 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python判断两个对象相等的原理
2017/12/12 Python
python对excel文档去重及求和的实例
2018/04/18 Python
Python装饰器知识点补充
2018/05/28 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
新闻学专业求职信
2014/07/28 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
keepalived + nginx 实现高可用方案
2022/12/24 Servers