运行PHP脚本并传递参数
-
基础命令格式
在终端执行:php 脚本文件名.php 参数1 参数2 --选项=值
示例:
php calculate.php add 5 3 --format=json
-
参数类型说明
- 位置参数:按顺序传递的值(如
add
,5
,3
) - 选项参数:以开头的键值对(如
--format=json
)
- 位置参数:按顺序传递的值(如
脚本内获取参数的3种方法
▶ 方法1:通过超全局变量 $argv
和 $argc
// 获取所有参数数组 $allArgs = $argv; // 获取参数数量 $argCount = $argc; // 示例:计算两个数字的和 if ($argc >= 3) { $sum = $argv[1] + $argv[2]; echo "结果: " . $sum; } else { echo "错误:需要两个数字参数"; }
运行命令:
php sum.php 8 12
▶ 方法2:使用 getopt()
解析复杂参数
$options = getopt("a:b:", ["operation:"]); // 示例:支持短选项(-a)和长选项(--operation) $a = $options['a'] ?? 0; $b = $options['b'] ?? 0; $op = $options['operation'] ?? 'add'; switch ($op) { case 'add': echo $a + $b; break; case 'subtract': echo $a - $b; }
运行命令:
php calculator.php -a=15 -b=7 --operation=subtract
▶ 方法3:混合解析(位置参数+选项)
// 前两个为位置参数,第三个开始用getopt $pos1 = $argv[1] ?? null; $pos2 = $argv[2] ?? null; $options = getopt("", ["color:"]); echo "位置参数: $pos1, $pos2 | 颜色: " . ($options['color'] ?? '默认');
运行命令:
php mixed.php apple banana --color=red
关键注意事项
-
参数安全性
始终验证和过滤输入:if (!is_numeric($argv[1])) die("参数必须为数字");
-
选项规则
- 短选项:单字母前加(如
-h
) - 长选项:单词前加(如
--help
) - 带值选项:用空格或等号分隔(
-f test
或--file=log.txt
)
- 短选项:单字母前加(如
-
特殊参数处理
- 使用分隔符停止选项解析:
php script.php -- -text # 将"-text"视为普通参数
- 使用分隔符停止选项解析:
实用技巧
-
构建帮助文档
自动生成使用说明:if (in_array('--help', $argv)) { echo "用法: php script.php [选项]\n"; echo "--file=<文件名> 指定输入文件\n"; exit; }
-
环境检测
确保运行在CLI模式:if (php_sapi_name() !== 'cli') die("仅命令行可用");
-
交互式输入
结合fgets()
实现问答交互:echo "请输入姓名: "; $name = fgets(STDIN); // 从标准输入读取
典型应用场景
- 定时任务(Cron Job)处理
- 批量数据导入/导出
- 自动化测试脚本
- 系统管理工具开发
引用说明基于PHP官方文档中命令行模式和getopt()函数的技术规范,遵循PHP 8.x版本的语法标准,安全建议参考OWASP命令行注入防护指南。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5883.html