iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP如何获取命令行参数
  • 854
分享到

PHP如何获取命令行参数

2024-04-02 19:04:59 854人浏览 泡泡鱼
摘要

目录$argv 获得所有空格分隔的参数列表getopt() 从命令行参数列表中获取选项长选项冒号规则选项参数中断总结使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一

使用 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 变量可以用来获取命令行脚本的参数,通过这次学习才发现原来还有一个这么强大的选项参数函数。学习的过程非常简单,如何运用到真实的项目中才是关键所在,加油学习,努力实践吧!

测试代码:

GitHub.com/zhangyue050…

以上就是PHP如何获取命令行参数的详细内容,更多关于PHP 获取命令行参数的资料请关注编程网其它相关文章!

--结束END--

本文标题: PHP如何获取命令行参数

本文链接: https://www.lsjlt.com/news/125315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP如何获取命令行参数
    目录$argv 获得所有空格分隔的参数列表getopt() 从命令行参数列表中获取选项长选项冒号规则选项参数中断总结使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一...
    99+
    2022-11-12
  • 怎么获取PHP命令行参数
    这篇文章主要介绍怎么获取PHP命令行参数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如何获取PHP命令行参数使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一些定时任务或者一些脚本直接使用命令行处理...
    99+
    2023-06-15
  • PHP怎么获取命令行参数
    这篇文章主要介绍了PHP怎么获取命令行参数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的...
    99+
    2023-06-15
  • python-如何获取命令行是参数
    如果需要获取python test.py xx yy zz上面输入的xx yy zz python可以使用sys.argv获取到命令行参数。sys.argv[0]表示代码本身文件路径,所有参数从1开始,一下例子说明,创建一个test.py文...
    99+
    2023-01-31
    命令行 参数 python
  • node如何获取命令行中的参数
    这篇文章主要讲解了“node如何获取命令行中的参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node如何获取命令行中的参数”吧!认识processprocess是nodejs内置的一个对...
    99+
    2023-07-04
  • python怎么获取命令行参数
    在Python中,可以使用sys模块来获取命令行参数。下面是一个例子:```pythonimport sysarguments = ...
    99+
    2023-09-23
    python
  • python获取命令行参数的代码
    如下的内容内容是关于python获取命令行参数的内容,希望能对大家有所好处。 # [SNIPPET_NAME: Command line arguments]# [SNIPPET_CATEGORIES: Python Core]# [SN...
    99+
    2023-01-30
    命令行 参数 代码
  • shell中怎么获取命令行参数
    本篇文章为大家展示了shell中怎么获取命令行参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下:#! /bin/bashwhile getopts a:bc optdo &nbs...
    99+
    2023-06-09
  • shell如何获取命令行最后一个参数
    这篇文章主要介绍shell如何获取命令行最后一个参数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!获取命令行最后一个参数复制代码 代码如下:echo ${!#} echo&...
    99+
    2022-10-19
  • Python编程如何获取终端命令行参数
    这篇文章主要介绍了Python编程如何获取终端命令行参数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python编程如何获取终端命令行参数文章都会有所收获,下面我们一起来看看吧。实现步骤获取终端命令行参数,通...
    99+
    2023-07-02
  • shell获取命令行参数示例分享
    #! /bin/bash while getopts a:bc optdo case $opt in a) echo "aaa" echo $OPTARG b) ...
    99+
    2022-06-04
    示例 命令行 参数
  • 怎么在shell中获取命令行参数
    本篇文章为大家展示了怎么在shell中获取命令行参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。#! /bin/bashwhile getopts a:bc ...
    99+
    2023-06-09
  • node获取命令行中的参数详解
    目录认识processprocess.arg封装获取参数函数认识process 在开发cli工具时,往往离不开获取指令中各种参数信息,接下来本文将带着你如何在Node.js中获取执行...
    99+
    2022-11-13
    node获取命令行参数 node 命令行参数
  • node中怎么获取命令行中的参数
    process.arg在该对象中,有一个arg属性,它可以获取当前node执行时传入各个参数数据。我们创建一个index.js文件,先打印下process.args里面是什么东西console.log(process.arg) // nod...
    99+
    2022-11-22
    nodejs​ node
  • PHP命令行读取参数的方法
    这篇文章主要讲解了“PHP命令行读取参数的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP命令行读取参数的方法”吧!PHP在参数的读取上可以用多种方法来实现,我们今天为大家介绍的是关...
    99+
    2023-06-17
  • c++获取命令行参数失败怎么解决
    C++获取命令行参数失败的原因可能有很多种,下面列举几种常见的解决方案:1. 检查代码:确保你的代码正确获取命令行参数。你可以使用a...
    99+
    2023-09-23
    c++
  • shell学习教程获取命令行参数示例
    #! /bin/bashwhile getopts a:bc optdocase $opt ina)echo "aaa"echo $OPTARGb)echo "bb"c)echo "ccc"*)echo ...
    99+
    2022-06-04
    示例 命令行 参数
  • Python编程获取终端命令行参数示例
    目录实现步骤命令行启动动态绑定端口号代码实现实现步骤 获取终端命令行参数,通过使用 sys.argv实现 1.导入sys模块 import sys 2.获取命令行参数 params ...
    99+
    2022-11-11
  • Python:读取命令行参数
    也是argv之类的。 argv[0], argv[1], argv[2] ... argv[0]是py文件的文件名 argv[1] - ... 是后面跟着的参数 import sys args = sys.argv[:] prin...
    99+
    2023-01-31
    命令行 参数 Python
  • node.js读取命令行参数详解
    命令行参数(CLI)是在应用程序通过操作系统的命令行界面运行时用于向程序传递附加信息的文本字符串。 我们可以很容易地通过node中的全局对象(即process对象)读取这些参数。 下...
    99+
    2022-11-13
    node.js读取命令行参数 node.js读取命令行参数 node.js args模块读取命令行参数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作