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 分库分表hash算法
Nov 12 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
html静态页面调用php文件的方法
Nov 13 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
非常经典的PHP文件上传类分享
May 15 PHP
PHP类的特性实例分析
Sep 28 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 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的图形函数中显示汉字
2006/10/09 PHP
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
图片按比例缩放函数
2006/06/26 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
JS实现的抛物线运动效果示例
2018/01/30 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
建筑项目策划书
2014/01/13 职场文书
装修五一活动策划案
2014/01/23 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书