首页 / PHP 入门教程 / PHP 命令行脚本

PHP 入门教程

PHP 命令行脚本

本教程共 65 篇 · 第 62 篇 · 更新于 2026-07-24 · 约 9 分钟阅读

PHPPHP8CLI命令行CronSymfony Console脚本

62. PHP 命令行脚本

本节目标:掌握 PHP CLI 模式的使用,能够编写命令行脚本,了解定时任务和 Symfony Console 组件。

PHP 不仅能写网页,也能写命令行程序。定时备份、数据导入、批量处理等场景,用 CLI 脚本比网页更合适。


1. CLI 与 Web 模式的区别

特性Web 模式CLI 模式
运行方式通过浏览器/HTTP 请求命令行直接执行
输出目标浏览器终端
超时限制max_execution_time 限制默认无限制
内存限制memory_limit 限制可单独配置
全局变量$_GET$_POST$argv$argc

2. 运行 PHP 脚本

创建文件 hello.php

<?php
echo 'Hello, CLI!' . PHP_EOL;

执行:

php hello.php

常用 CLI 参数:

php -i          # 显示 PHP 配置信息
php -v          # 查看 PHP 版本
php -a          # 进入交互式 shell
php -r "echo 1+1;"  # 直接执行代码
php -S localhost:8000  # 启动内置服务器

3. 接收命令行参数

PHP CLI 自动提供两个预定义变量:

  • $argc:参数个数(Argument Count)
  • $argv:参数数组(Argument Vector),第一个元素是脚本名
<?php
// greet.php
if ($argc < 2) {
    echo "用法:php greet.php <名字>\n";
    exit(1);
}

$name = $argv[1];
echo "你好,{$name}!\n";

执行:

php greet.php 张三
# 输出:你好,张三!

多个参数:

<?php
// 参数:php script.php arg1 arg2 arg3
print_r($argv);
// [0] => script.php
// [1] => arg1
// [2] => arg2
// [3] => arg3
Tip

退出状态码 0 表示成功,非零表示错误。Shell 脚本可通过 $? 获取上一个命令的退出码。


4. 读取用户输入

<?php
echo '请输入你的名字:';
$name = trim(fgets(STDIN));
echo "你好,{$name}\n";

5. 定时任务(Cron)

Linux 系统可用 crontab 定时执行 PHP 脚本。

# 编辑定时任务
crontab -e

添加任务(每天凌晨 2 点执行备份):

0 2 * * * /usr/bin/php /var/www/backup.php >> /var/log/backup.log 2>&1

cron 时间格式:

分 时 日 月 星期 命令
示例含义
*/5 * * * *每 5 分钟
0 * * * *每小时
0 0 * * *每天零点
0 9 * * 1每周一上午 9 点

Windows 系统可使用”任务计划程序”实现类似功能。


6. Symfony Console 组件

对于复杂的命令行应用,推荐使用 Symfony Console 组件。它提供参数解析、命令分组、进度条等功能。

安装:

composer require symfony/console

简单示例:

<?php
require 'vendor/autoload.php';

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class GreetCommand extends Command
{
    protected static $defaultName = 'app:greet';

    protected function configure(): void
    {
        $this->setDescription('问候某人')
            ->addArgument('name', InputArgument::REQUIRED, '对方名字');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $name = $input->getArgument('name');
        $output->writeln("<info>你好,{$name}!</info>");
        return Command::SUCCESS;
    }
}

$app = new Application();
$app->add(new GreetCommand());
$app->run();

执行:

php console.php app:greet 张三
Note

Laravel、Symfony 等框架的命令行工具(artisanconsole)都基于 Symfony Console 组件。


小结

PHP CLI 让 PHP 的应用场景从网页延伸到服务端脚本。简单的任务用原生 $argv 即可,复杂应用推荐 Symfony Console 组件。


来源:参考了 php-the-right-way「Command Line Interface」、Symfony 官方文档,改写后所得。