当前位置: 首页 > news >正文

重庆网站建设网络推广/搜索词热度查询

重庆网站建设网络推广,搜索词热度查询,做网站用什么写,学校网站开发协议如何获取PHP命令行参数使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET 、 POST 一样为这些命令行脚本提供参数。比如在针对某些日期做统计的脚本,就需…

如何获取PHP命令行参数

使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET 、 POST 一样为这些命令行脚本提供参数。比如在针对某些日期做统计的脚本,就需要传递一个日期给它,这样我们就统计指定日期的一些数据。这类需求应该非常常见,那么,我们都是如何来接收这些命令行的参数的呢?今天,就来介绍一下这方面的内容。

$argv 获得所有空格分隔的参数列表

这个变量估计是大家用得比较多的一个接参变量了。它是 PHP 为我们准备好的一个固定变量,目的就是获取传递给脚本的参数数组。

print_r($argv);

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd

// Array

// (

//     [0] => 如何获取PHP命令行参数.php

//     [1] => --a=1

//     [2] => -b=2

//     [3] => -c=3

//     [4] => -d=4

//     [5] => --e=5

//     [6] => ccc

//     [7] => ddd

// )

这个数组是以参数间隔的空格进行分隔的。第1个元素是当前运行的脚本文件名,也就是说,不管有没有参数,这个变量一定会有一个 $argv[0] 表示的是当前的脚本文件名。

在日常的开发需求中,其实使用这个变量就已经够用了。但是这明显不会是我们今天的主题,大家注意到上面的代码中我们有很多参数是 -x=xxx 的形式,这种形式的参数是不是和 Linux 的命令选项非常像,没错,这就是我们今天要重点介绍的:从命令行参数列表中获取选项。

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

其实就是这样一个简单的函数,我们就可以像 Linux 的命令选项一样获取指定的命令值。而且不是像 $argv 按空格进行分隔,命令选项函数会将这些命令选项封装成数组,组成以选项名为键,以等号后面的内容为值的数组,更加方便我们的使用。

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd

print_r(getopt('a:b:c:d:e:f:'));

// Array

// (

//     [b] => 2

//     [c] => 3

//     [d] => 4

// )

是不是很神奇,而且非常直观吧,我们直接就拿到了 b 、 c 、d 的内容并且是格式非常清晰的键值数组形式。有同学要问了,a 和 e 呢?还有后面的 ccc 、 ddd 呢?

首先要说明的是,ccc 和 ddd 不是标准的选项参数,也就是说,这个函数接收的内容是以 - 开头的选项,所以 ccc 和 ddd 不会在这里输出,并且需要注意的是,非选项参数会中断选项参数的获取,在 ccc 之后如果继续添加 - 开头的选项也是无法获取到的,这个我们后面还会看到。而 -- 开头的选项参数呢?我们直接看下面的长选项功能。

长选项

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd

print_r(getopt('', ['a:','b:','c:','d:','e:','f:']));

// Array

// (

//     [a] => 1

//     [e] => 5

// )

没错,getopt() 函数的第二个参数就是定义这种 -- 开头的长选项的,而且需要注意的是,第一个参数是字符串类型,第二个长选项参数是数组类型的。那么我们把它们结合起来,就当然可以获取到全部的参数信息啦!

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd

print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:']));

// Array

// (

//     [a] => 1

//     [b] => 2

//     [c] => 3

//     [d] => 4

//     [e] => 5

// )

OK,参数选项获取没问题了吧,细心的同学肯定又发现了一个问题,这个 getopt() 函数的参数中定义的选项名称后面为啥都要加个冒号?这就涉及到我们的冒号规则了,请直接往下看。

冒号规则

getopt() 的前两个参数都支持一套关于选项获取的规则:

单独的字符(不接受值)

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

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

我们还是直接通过代码来看一下。

// 一

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd

print_r(getopt('abcdef'));

// Array

// (

//     [b] =>

//     [c] =>

//     [d] =>

// )

// 二

// php 如何获取PHP命令行参数.php -f

print_r(getopt('f::'));

// Array

// (

//     [f] =>

// )

print_r(getopt('f:'));

// Array

// (

// )

// 三

// php 如何获取PHP命令行参数.php -f 22

print_r(getopt('f::'));

// Array

// (

//     [f] =>

// )

print_r(getopt('f:'));

// Array

// (

//     [f] => 22

// )

// 四

// php 如何获取PHP命令行参数.php -f=22

print_r(getopt('f::'));

// Array

// (

//     [f] => 22

// )

print_r(getopt('f:'));

// Array

// (

//     [f] => 22

// )

这一段比较长,我们一块一块来看。首先是不带冒号的 abcdef 写法,返回的数组中都包含键,但没有值,对应上面的规则就是不接受这些参数选项的值,你传了这些参数选项也是只有键名而内容是空的。

第二段是定义了一个参数,但是不给值,这时,双冒号 :: 会有键名,而单冒号 : 则什么都没有。

第三段是空格形式的选项值,双冒号 :: 有键名但没有值,单冒号 : 键值正常。

第四段是等号 = 形式的选项值,单双冒号都正常接收到键值。

选项参数中断

上文中我们提到过参数中断的问题,就是在选项参数之后如果有一个非选项参数的参数出现,getopt() 就无法再获取到这个非选项参数后面的所有内容了。

// php 如何获取PHP命令行参数.php -f=22 aa -b=33

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

// Array

// (

//     [f] => 22

// )

通过这个测试可以清晰的看出后面的 b 选项无法获取。这时,如果我们想知道选项参数在什么地方或者因为哪个参数而中断的话,就可以使用 getopt() 函数的第三个参数了。

// php 如何获取PHP命令行参数.php -f=22 aa -b=33

$optind = null;

getopt('f:b:', [], $optind);

echo $optind, PHP_EOL; // 返回中断位置的索引值,2

echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引顺序,aa

注释已经写得很清晰了,第三个参数会回调一个参数选项中断位置的索引,并且这个索引是和 $argv 的索引顺序位置一致的。

总结

说实话,在没看文档前真的只知道有一个 $argv 变量可以用来获取命令行脚本的参数,通过这次学习才发现原来还有一个这么强大的选项参数函数。学习的过程非常简单,如何运用到真实的项目中才是关键所在,加油学习,努力实践吧!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php

参考文档:

https://www.php.net/manual/zh/reserved.variables.argv.phphttps://www.php.net/manual/zh/function.getopt.php

http://www.jmfq.cn/news/5152969.html

相关文章:

  • 密云区住房城乡建设委官方网站/推广策划
  • 为女朋友做的表白网站/宁波seo公司推荐
  • 兼职做网站这样的网站/b站黄页推广软件
  • 昆山网站建设哪家好/手机百度网址大全首页
  • 我本沉默传奇新开网站/今日国际新闻最新消息事件
  • 专业的培训网站建设/软文营销定义
  • 郑州网站设计/十八大禁用黄app入口
  • 日本最新消息/上海百度提升优化
  • 百度网站置顶怎么做/衡阳seo快速排名
  • 政府网站html源码/免费新闻源发布平台
  • 聊城百度做网站的/谷歌seo招聘
  • 西安搬家公司收费/seo研究院
  • 租用海外服务器的网站有域名吗/谷歌下载安装
  • 做网站公奇闻司郑州汉狮/谷歌seo服务
  • 免费域名的网站/营销型网站建设团队
  • 整形医院网站建设/苏州网站制作推广
  • 如何修改单页网站/关键词分词工具
  • 建设企业网站的需求分析/朋友圈营销
  • 自己怎么做免费网站空间/今日的新闻头条10条
  • 卖挂的网站怎么做/百度账号登录入口网页版
  • 做外围代理要有自己的网站/永久免费的电销外呼系统
  • 怎么看一个网站是哪个公司做的/系统优化软件
  • 修改wordpress logo/首页关键词优化公司
  • 做购物网站的数据库/长尾词seo排名优化
  • 做产品类的工作上什么网站好/网页设计大作业
  • 阜新本地网站建设平台/关键字挖掘爱站网
  • 大型网站建设优化企业/零基础学电脑培训班
  • 大良营销网站建设策划/大型网站seo课程
  • 做文案的网站/本周新闻热点
  • 网站策划主要工作是什么/软件制作平台