不出现php version网页_php冷知识 - 从命令行参数列表中获取选项

01d2b93c948c96fd57a077e8b69e67bd.png

分享一个php的冷知识 - ,从命令行参数列表中获取选项

用到的函数是getopt

说明

函数签名是这样的

getopt ( string $options [, array $longopts [, int &$optind ]] ) : array|bool false

解析传入脚本的选项,成功返回数组,解析失败返回false

参数

  • options 该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符(-)开头。 比如,一个选项字符串 "x" 识别了一个选项 -x。 只允许 a-z、A-Z 和 0-9。
  • longopts 选项数组。此数组中的每个元素会被作为选项字符串,匹配了以两个连字符(--)传入到脚本的选项。 例如,长选项元素 "opt" 识别了一个选项 --opt。
  • optind 如果存在optind参数,则参数解析停止的索引将被写入此变量。

参数值

options 可能包含了以下元素: - 单独的字符(不接受值) - 后面跟随冒号的字符(此选项需要值) - 后面跟随两个冒号的字符(此选项的值可选)

optionslongopts 的格式几乎是一样的,唯一的不同之处是 longopts 需要是选项的数组(每个元素为一个选项),而 options 需要一个字符串(每个字符是个选项)。

例子

说了这么多,我们举例说明吧

1. 基本用法

<?php
// Script 1.php
$options = getopt("h:p:d");
var_dump($options);
?>

命令行下测试看看

php 1.php -h 127.0.0.1 -p 8000 -d

以上例程会输出:

array(3) {["h"]=>string(9) "127.0.0.1"["p"]=>string(4) "8000"["d"]=>bool(false)
}

选项参数也可以中间不要空格

php 1.php -h 127.0.0.1 -p 8000 -d

php5.3之后还可以使用 "=" 作为 参数和值的分隔符

php 1.php -h=127.0.0.1 -p=8000 -d

2. 引入长选项

<?php
// Script 2.php
$shortopts  = "";       // 短选项 用字母字符串
$shortopts .= "h:";     // 必选选项 字母后面一个冒号
$shortopts .= "p::";    // 可选选项 字母后面两个冒号
$shortopts .= "vd";     // 无需值的选项 字母后面没有冒号$longopts  = array(     // 长选项 用单词的数组"host:",            // 必选选项 单词后面一个冒号"port::",           // 可选选项 单词后面两个冒号"version",          // 无需值的选项 单词后面没有冒号"debug",            // 无需值的选项 单词后面没有冒号
);$options = getopt($shortopts, $longopts);
var_dump($options);
?>

运行测试:

php 2.php -h127.0.0.1 -p8000 -d --host=127.0.0.1 --port=8000 --version --debug

输出:

array(7) {["h"]=>string(9) "127.0.0.1"["p"]=>string(4) "8000"["d"]=>bool(false)["host"]=>string(9) "127.0.0.1"["port"]=>string(4) "8000"["version"]=>bool(false)["debug"]=>bool(false)
}

3. 同一选项可以传递多次

运行测试:

php 2.php -d -d --version --debug --port=123 --port=234

输出:

array(4) {["d"]=>array(2) {     // 多个选项参数值以数组呈现[0]=>bool(false)[1]=>bool(false)}["version"]=>bool(false)["debug"]=>bool(false)["port"]=>array(2) {[0]=>string(3) "123"[1]=>string(3) "234"}
}

4. 使用 optind

// Script 3.php
$optind = null;
$opts = getopt('a:b:', [], $optind);
var_dump($argv);
var_dump($optind);
$pos_args = array_slice($argv, $optind);  // 从数组中取出一段
var_dump($pos_args);

运行测试:

php 3.php -a 1 -b 2 -- test

输出:

array(7) {[0]=>string(7) "cli.php"[1]=>string(2) "-a"[2]=>string(1) "1"[3]=>string(2) "-b"[4]=>string(1) "2"[5]=>string(2) "--"[6]=>string(4) "test"
}
int(6)      // $optind = 6
array(1) {[0]=>string(4) "test"
}

至此以后就可以写出漂亮优雅的cli程序了

参考

  • https://www.php.net/manual/zh/function.getopt.php
作者博客链接​metmoon.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2

faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇&#xff1a;faster-rcnn(testing): ubuntu14.04caffecuda7.5cudnn5.1.3opencv3.0matlabR2014a环境搭建记录 首先,进入官方github网站:https://github.com/rbgirshick/py-faster-…

modbus从站模拟软件_作为工控电气人,你知道我们必备的软件有哪些吗?

作为工控电气人&#xff0c;你知道我们必备的软件有哪些吗&#xff1f;今天我就来给大家介绍一下&#xff0c;工控电气人常用的几款软件&#xff0c;有了它们&#xff0c;我们的工作学习将会更易上手&#xff0c;效率翻倍。以下介绍主要是分为电工常用软件&#xff0c;PLC编程软…

【数据分析】豆瓣电影Top250爬取的数据的可视化分析

豆瓣Top250网址 将之前爬取到的豆瓣电影进行简单的可视化&#xff1a; 数据列表保存为CSV格式&#xff0c;如图 导入数据 做好准备 #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import matplotlib.pylab as plt import re from numpy import rank from bu…

sqlmap的二次开发

1、sqlmapapi的帮助信息。 -s 启动sqlmap作为服务器 -h 指定sqlmap作为服务器的IP地址&#xff0c;默认127.0.0.1 -p 指定sqlmap服务器的端口&#xff0c;默认端口为8775 2、启动服务 浏览器访问&#xff1a; 3、api介绍&#xff1a;sqlmap项目下的api.py文件含有所有的api adm…

docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

docker随手笔记第一节 docker概念及安装docker随手笔记第二节 docker常用命令解析docker随手笔记第三节 docker构建java镜像docker随手笔记第四节 docker安装mysql5.7docker随手笔记第五节 docker安装redis4.0docker随手笔记第六节 docker安装jenkinsdocker随手笔记第七节 jenk…

【机器学习】逻辑斯蒂回归原理

逻辑斯蒂函数 引入&#xff1a; 在线性感知器算法中&#xff0c;我们使用了一个f(x)x函数&#xff0c;作为激励函数&#xff0c;而在逻辑斯蒂回归中&#xff0c;我们将会采用sigmoid函数作为激励函数&#xff0c;所以它被称为sigmoid回归也叫对数几率回归&#xff08;logistic …

手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择...

代码已经托管到码云&#xff0c;有兴趣的小伙伴可以下载看看https://git.oschina.net/joy_yuan/MobilePlayer一、设置视频缓冲进度显示视频播放进度的效果图如下&#xff1a;灰色的是缓冲的进度。原理&#xff1a;只有播放网络视频时&#xff0c;才有缓冲这个说法&#xff0c;所…

Django之创建应用以及配置路由

Django之创建应用以及配置路由 配置所有IP都可以访问你的项目 1.进入manage.py同级的my_web里面的settings.py的文件 2.在文件的第28行把ALLOWED_HOSTS []改成ALLOWED_HOSTS [*] 注意&#xff1a;*代表的是所有IP都可以访问 创建一个app应用 在终端中&#xff0c;结束项目…

python中opencv是什么_python-opencv的用法

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数&#xff0c;一个是文件名&#xff0c;一个值&#xff0c;如果值为1&#xff0c;接收的是彩色图片&#xff0c;如果值为零&#xff0c;接受的是灰度图片。会有一个返回值&#xff0c…

【Tensorflow】卷积神经网络实现艺术风格化通过Vgg16实现

卷积神经网络实现艺术风格化 基于卷积神经网络实现图片风格的迁移&#xff0c;可以用于大学生毕业设计基于python&#xff0c;深度学习&#xff0c;tensorflow卷积神经网络&#xff0c; 通过Vgg16实现&#xff0c;一幅图片内容特征的基础上添加另一幅图片的风格特征从而生成一幅…

抗误码技术

抗误码技术&#xff1a; 视频传输过程中的错误是不可避免的&#xff0c;抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具&#xff0c;同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有&#xff1a;参数集、数…

Linux统计文件行数、字数、字节数

2019独角兽企业重金招聘Python工程师标准>>> 语法&#xff1a;wc [选项] 文件 说明&#xff1a;该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名&#xff0c;则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符…

【Tensorflow】人脸128个关键点识别基于卷积神经网络实现

引言&#xff1a; 卷积神经网络 卷积神经网络最早是为了解决图像识别的问题,现在也用在时间序列数据和文本数据处理当中,卷积神经网络对于数据特征的提取不用额外进行,在对网络的训练的过程当中,网络会自动提取主要的特征.卷积神经网络直接用原始图像的全部像素作为输入,但是内…

python 爬虫 包_python爬虫学习之路-抓包分析

利用浏览器抓包&#xff0c;是爬虫中的很实用的技能。在爬虫编程之前&#xff0c;我们要对抓取的目标页面有所了解&#xff0c;比如浏览器的这个请求这个页面中间都经历了什么&#xff0c;数据是怎么发送和返回的。 抓包的作用 我把抓包分析的作用简单列一下&#xff1a; 分析请…

帧间EC原理和过程

出错的宏块&#xff08;图中灰色表示&#xff09;根据上、下、左、右四个方向相邻宏块的不同分割情况及预测类型进行插值。将最后的结果中进行比较&#xff0c;选取边界像素差值之和最小者为最优的EC方案。其步骤为&#xff1a; 1、判断相邻宏块左上角8*8块的预测模式是否大于R…

Maven依赖的是本地工程还是仓库jar包?

相信大家都碰见过maven配置的依赖或者是jar包或者是工程&#xff0c;在开发的过程当中&#xff0c;我们当然需要引入的是工程&#xff0c;这样查看maven依赖的文件的时候&#xff0c;就能直接查看到源码。 一、本地工程依赖 举个例子&#xff0c;其架构如下所示&#xff08;以下…

关于django新版本无法使用MySQL数据库的问题

关于django新版本无法使用MySQL数据库的问题 参考这里 稍微记录下Django2.2使用MariaDB和MySQL遇到的坑 现在演示一下整个流程吧 1.创建项目和应用 PS&#xff1a;你也可以使用PyCharm直接创建项目 2.注册应用 先把刚刚创建的应用添加进去 3.配置MySQL或者MariaDB 4.PyMySQL替…

python连接sql数据库_python连接sql server数据库实现增删改查

简述 python连接微软的sql server数据库用的第三方模块叫做pymssql&#xff08;document&#xff1a;http://www.pymssql.org/en/stable/index.html&#xff09;。在官方文档可以看到&#xff0c;pymssql是基于_mssql模块做的封装&#xff0c;是为了遵守python的DBAPI规范接口.…

es5.0 安装head插件

es5.0的安装和之前的版本有些区别,我的电脑用plugin install 没成功, 查了一下资料,说是可以用grunt进行安装,启动; 1,先安装grunt: grunt是一个很方便的构建工具&#xff0c;可以进行打包压缩、测试、执行等等的工作&#xff0c;5.0里的head插件就是通过grunt启动的。 npm ins…

套接字 资料查阅

(3)套接字(socket) 一个完整的网络应用程序包括客户端和服务器两个部分。网间通信进程需要由两个进程组成&#xff0c;并且只能用同一种协议。也就是说&#xff0c;不能在通信的一端使用TCP协议&#xff0c;而另一端则用UDP协议。一个完整的网络通信需要一个五元组来标识…