PHP命令行脚本(CLI)是一种强大的工具,允许开发者通过命令行直接执行PHP代码,而无需依赖Web服务器,它常用于自动化任务、系统管理、数据处理、定时任务等场景,相比Web应用,CLI脚本具有更高的执行效率和更低的资源消耗,本文将详细介绍PHP命令行脚本的创建、执行、参数处理、输入输出以及常见应用场景。

创建PHP命令行脚本
PHP命令行脚本以.php为扩展名,与Web脚本的区别在于无需Web服务器环境,直接在文件中编写PHP代码即可,例如创建一个名为hello_cli.php的文件,内容如下:
<?php echo "Hello, Command Line World!\n"; ?>
脚本中的<?php
标签是必须的,即使是最简单的代码,执行时,通过终端进入脚本所在目录,运行命令php hello_cli.php
,即可在终端看到输出结果。
参数处理
PHP命令行脚本支持通过命令行传递参数,这些参数可以通过$argv
数组或$argc
变量获取。$argv
是一个索引数组,包含所有传递给脚本的参数,其中$argv[0]
是脚本名称,$argv[1]
及之后是用户传入的参数。$argc
表示参数的总数(包括脚本名称)。
<?php echo "脚本名称: " . $argv[0] . "\n"; echo "参数数量: " . $argc . "\n"; for ($i = 1; $i < $argc; $i++) { echo "参数$i: " . $argv[$i] . "\n"; } ?>
执行php script.php arg1 arg2
,输出结果为:

脚本名称: script.php
参数数量: 3
参数1: arg1
参数2: arg2
更复杂的参数处理可以使用getopt()
函数,它支持短选项(如-f
)和长选项(如--file
),
$options = getopt("f:v", ["file:", "verbose"]); if (isset($options['f']) || isset($options['file'])) { $file = $options['f'] ?? $options['file']; echo "处理文件: $file\n"; } if (isset($options['v']) || isset($options['verbose'])) { echo "详细模式已启用\n"; }
执行php script.php -f test.txt --verbose
,输出:
处理文件: test.txt
详细模式已启用
输入与输出
PHP命令行脚本支持标准输入(STDIN)、标准输出(STDOUT)和标准错误输出(STDERR),可以使用fgets(STDIN)
读取用户输入,fwrite(STDOUT, $output)
输出信息到终端,fwrite(STDERR, $error)
输出错误信息。
<?php echo "请输入您的名字: "; $name = trim(fgets(STDIN)); fwrite(STDOUT, "你好, $name!\n"); ?>
执行脚本后,终端会提示输入名字,输入后显示问候语。

常见应用场景
- 自动化任务:如定时备份数据库、生成报告等,结合Linux的
cron
或Windows的任务计划程序,可以定期执行脚本。 - 数据处理:处理大型CSV文件、日志分析等,CLI脚本比Web应用更适合处理大数据量。
- 系统维护:如清理临时文件、检查服务器状态等。
- 开发工具:如代码生成器、自动化测试脚本等。
性能优化
CLI脚本可以通过关闭错误报告、禁用自动输出缓冲等方式提升性能,在脚本开头添加error_reporting(0)
和ob_end_clean()
,可以减少不必要的开销。
相关问答FAQs
Q1: PHP命令行脚本如何获取当前工作目录?
A1: 使用getcwd()
函数可以获取当前工作目录的绝对路径。echo "当前目录: " . getcwd() . "\n";
。
Q2: 如何在PHP CLI脚本中处理多行输入?
A2: 使用stream_get_contents(STDIN)
可以读取多行输入,直到遇到EOF(文件结束符)。$input = stream_get_contents(STDIN);
会将所有输入内容保存到$input
变量中。