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 中的类
Oct 09 PHP
用php写的serv-u的web申请账号的程序
Oct 09 PHP
PHP 引用是个坏习惯
Mar 12 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
php在文件指定行中写入代码的方法
May 23 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
php格式化日期实例分析
Nov 12 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php实现数据库的增删改查
2017/02/26 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
Prototype框架详解
2015/11/25 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python扩展内置类型详解
2018/03/26 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
硕士研究生自我鉴定
2013/11/08 职场文书
西式婚礼证婚词
2014/01/12 职场文书
户籍证明的格式
2014/01/13 职场文书
出国考察邀请函
2014/01/21 职场文书
企业负责人任命书
2014/06/05 职场文书
招标保密承诺书
2015/01/20 职场文书
学历证明范文
2015/06/16 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL