1、PHP CLI基础:什么是CLI、PHP CLI与Web模式的区别、PHP CLI的安装与配置、第一个PHP CLI脚本

1.1 什么是CLI?

CLI,全称Command Line Interface,中文叫命令行界面。说白了,就是那个黑乎乎的终端窗口,你敲命令,它给你反馈。

我刚开始接触编程时,总觉得图形界面才是王道。后来才发现,真正的高手都在命令行里游刃有余。为什么?因为命令行效率高、可脚本化、资源占用少。你想想看,一个简单的文件批量处理,用鼠标点来点去可能要几分钟,用CLI命令一秒搞定。

PHP CLI,就是把PHP运行在命令行模式下。它不像Web模式那样需要Apache或Nginx,直接通过终端执行PHP脚本。我个人习惯把CLI脚本当作瑞士军刀——文件处理、数据迁移、定时任务、系统监控,什么都能干。

核心要点:CLI模式下的PHP是一个独立的脚本执行引擎,不依赖任何Web服务器。

1.2 PHP CLI与Web模式的区别

很多新手会问:PHP不都是跑在网页上的吗?其实不是。PHP从诞生之初就支持CLI模式,只是Web模式太出名了,大家容易忽略这个能力。

我列个表格,你一看就明白:

对比项 PHP CLI模式 PHP Web模式
运行环境 终端/命令行 Web服务器(Apache/Nginx)
输出方式 直接输出到终端 输出HTTP响应
超时限制 默认无超时(可手动设置) 通常有30秒超时限制
内存限制 默认无限制(可手动设置) 通常有128M或256M限制
请求方式 单次执行,完成后退出 每次请求一个进程
适用场景 定时任务、脚本处理、系统管理 网页应用、API接口

这里有个关键区别:CLI模式下没有$_GET、$_POST这些超全局变量。为什么?因为没有HTTP请求啊。你想想看,在终端里敲命令,哪来的GET参数?

我的经验:我在项目中经常用CLI脚本处理大数据量的导出任务。Web模式下跑5分钟就超时了,CLI模式跑几个小时都没问题。嗯,这就是它的优势。

1.3 PHP CLI的安装与配置

安装PHP CLI其实很简单。大多数Linux发行版都自带PHP,但可能只装了Web模式。你需要单独安装CLI版本。

在Ubuntu/Debian上:

sudo apt update
sudo apt install php-cli

在CentOS/RHEL上:

sudo yum install php-cli

在macOS上(使用Homebrew):

brew install php

安装完成后,验证一下:

php -v

你会看到类似这样的输出:

PHP 8.2.12 (cli) (built: Oct 26 2023 17:50:25) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies

注意看第一行末尾的 (cli),这表示你运行的是CLI模式。

避坑指南:我曾经遇到过一个问题——明明安装了PHP,但执行php命令时提示"command not found"。后来发现是环境变量没配好。解决办法是把PHP的安装目录加到PATH里。在~/.bashrc或~/.zshrc中添加:
export PATH=$PATH:/usr/bin/php
然后执行 source ~/.bashrc 生效。

还有一些常用的CLI配置项,我建议你了解一下:

  • php.ini路径:CLI模式使用独立的php.ini文件,通常位于 /etc/php/8.2/cli/php.ini
  • memory_limit:CLI模式下默认-1(无限制),但你可以手动设置
  • max_execution_time:CLI模式下默认0(无限制)
  • display_errors:建议开启,方便调试
小技巧:你可以用 php --ini 命令查看当前CLI模式加载的配置文件路径。我每次换环境第一件事就是跑这个命令,确认配置对不对。

1.4 第一个PHP CLI脚本

好了,理论说完了,咱们动手写一个。第一个脚本,来个经典的"Hello World"吧。

创建一个文件,比如 hello.php

<?php
echo "Hello, PHP CLI World!\n";
echo "当前时间:" . date('Y-m-d H:i:s') . "\n";
echo "PHP版本:" . PHP_VERSION . "\n";

然后在终端里执行:

php hello.php

你会看到:

Hello, PHP CLI World!
当前时间:2024-01-15 14:30:25
PHP版本:8.2.12

是不是很简单?但这里有几个细节要注意:

  • 不需要<?php结束标签:CLI脚本中,我建议省略?>,避免意外输出空白字符
  • 换行用\n:Web模式下用<br>,CLI模式下用\n
  • 直接输出到终端:echo、print、var_dump都会直接显示在终端上

再来看一个实用点的例子——接收命令行参数:

<?php
if ($argc < 2) {
    echo "用法:php greet.php <名字>\n";
    exit(1);
}

$name = $argv[1];
echo "你好,{$name}!欢迎来到PHP CLI世界。\n";

执行:

php greet.php 张三

输出:

你好,张三!欢迎来到PHP CLI世界。

这里用到了两个内置变量:

  • $argc:参数个数(包括脚本名本身)
  • $argv:参数数组,$argv[0]是脚本名,$argv[1]开始是传入的参数
重要提醒:exit(1)表示非正常退出。在CLI脚本中,返回0表示成功,非0表示失败。这个习惯一定要养成,因为很多自动化工具(比如crontab、Jenkins)会检查退出码。

嗯,到这里你已经掌握了PHP CLI的基础。说白了,就是把PHP当作一个脚本语言来用,跟Python、Shell没什么两样。但它的优势在于——你本来就熟悉PHP语法,不用再学一门新语言。

我记得第一次用PHP写CLI脚本时,感觉特别爽。不用考虑浏览器兼容性,不用处理HTTP请求,就是纯粹的代码逻辑。那种掌控感,是Web开发给不了的。

下一章,我们会深入讲解CLI脚本的参数解析和交互式输入。到时候你会看到,PHP CLI能做的事情远比想象中多。