最近看python脚本,传参很方便。就查了查PHP脚本如何接受参数,发现有三种方式,记录一下

使用$argv or $argc对参数进行接收

描述

$argv — 传递给脚本的参数数组,$argc - 参数数量 注意会包含脚本文件名

第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名
这个变量仅在 register_argc_argv 打开时可用。可以使用 php -i|grep register_argc_argv查看是否为on

案例
  1. 脚本
1
2
3
<?php
var_dump($argv);
?>
  1. 命令行
1
php script.php arg1 arg2 arg3
  1. 结果输出
1
2
3
4
5
6
7
8
9
10
array(4) {
[0]=>
string(10) "script.php"
[1]=>
string(4) "arg1"
[2]=>
string(4) "arg2"
[3]=>
string(4) "arg3"
}

使用getopt函数

描述

getopt — 从命令行参数列表中获取选项
通用命令格式 getopt ( string $options [, array $longopts [, int &$optind ]] ) : array

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

options 可能包含了以下元素

  • 单独的字符(不接受值)
  • 后面跟随冒号的字符(此选项需要值)
  • 后面跟随两个冒号的字符(此选项的值可选)
  • 选项的值不接受空格作为分隔符
案例
  1. 脚本
1
2
3
4
5
<?php
// Script example.php
$options = getopt("f:hp:");
var_dump($options);
?>
  1. 命令行
1
php example.php -fvalue -h
  1. 输出
1
2
3
4
5
6
array(2) {
["f"]=>
string(5) "value"
["h"]=>
bool(false)
}

使用STDOUTSTDIN提示用户输入

描述

stdin 标准的输入设备
stdout 标准的输出设备
stderr 标准的错误设备

fwrite()函数首先会向标准的输出设备写一条消息,询问用户输入。然后它会把从标准输入设备获得的用户输入信息读取到一个php变量里,并它把合并成为一个字符串。然后就用fwrite()把这个字符串打印输出到标准的输出设备上

案例
  1. 脚本
1
2
3
4
5
6
7
8
<?php
fwrite(STDOUT, '请输入开始时间:');
$start = fgets(STDIN);
echo "开始时间为:{$start}\n";
fwrite(STDOUT, '请输入结束时间:');
$end = fgets(STDIN);
echo "结束时间为:{$end}\n";
var_dump([$start, $end]);
  1. 命令行
1
php script.php
  1. 结果输出
1
2
3
4
5
6
7
8
请输入开始时间:11111
开始时间为:11111

请输入结束时间:22222
结束时间为:22222

"11111\n"
"22222\n"