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文件上传实例详解!!!
Jan 02 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
dedecms集成财付通支付接口
Dec 28 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
php开发微信支付获取用户地址
Oct 04 PHP
PHP文件操作实例总结
Sep 27 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
layui的select联动实现代码
2019/09/28 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
Python之时间和日期使用小结
2019/02/14 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
护士辞职信范文
2014/01/19 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
运动会广播稿200字
2014/10/18 职场文书
田径运动会广播稿
2015/08/19 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python