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变量中。
