跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

PHP CLI 与 FPM 区别面试题

PHP-CLI与PHP-FPM运行环境、生命周期、变量支持、适用场景及配置方向均不同:CLI用于命令行脚本,独立进程,支持$argv;FPM为常驻Web服务,支持$_GET等超全局变量,适用于HTTP请求。

运行环境完全不同PHP-CLI 是命令行接口,直接在终端里执行脚本,不依赖 Web 服务器,也不走 HTTP 协议。比如phpartisan migrate或php script.php hello就是 CLI 场景。

PHP-FPM 是 FastCGI 进程管理器,专为 Web 请求设计,必须配合 Nginx 或 Apache 使用。它监听 socket 或端口,接收 Web 服务器转发来的 PHP 请求,处理完再把结果交回给 Web 服务器。

生命周期和进程模型差异明显CLI 每次执行都是独立进程:启动 → 执行脚本 → 释放资源 → 退出。没有常驻内存,也没有请求循环。

FPM 是常驻服务:master 进程管理多个 worker 进程,每个 worker 循环等待请求、处理、返回,直到被回收或重启。这种设计避免了反复加载解析器的开销,适合高并发 Web 场景。

立即学习“PHP免费学习笔记(深入)

”;

PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载可用变量和扩展支持有区别CLI 下没有$_GET、$_POST、$_SERVER['REQUEST_URI']等超全局变量,因为根本不经过 HTTP 请求流程;但有$argv和$argc用于接收命令行参数。

FPM 下完整支持所有 Web 相关超全局变量,也默认启用 session、cookie、output buffering 等机制。部分扩展(如某些调试或监控工具)可能只在 FPM 或 CLI 中启用,需检查phpinfo()或php -m对比确认。

适用场景不能混用选 CLI:定时任务(crontab)、数据导入导出、队列消费、本地开发调试、一键部署脚本选 FPM:用户访问网站、API 接口响应、需要 session 登录态、依赖 URL 路由或重写规则的项目注意:FPM 不能直接执行 cron 任务,CLI 也不能响应浏览器请求 —— 不是性能问题,而是架构定位不同配置与调优方向不一样CLI 的配置重点在单次脚本执行:比如memory_limit可设得很高(如 -1 不限制),max_execution_time可忽略(默认 0 表示不限时)。

FPM 的配置围绕并发与稳定性:比如pm.max_children、pm.start_servers、request_terminate_timeout,还要关注慢日志、平滑重启、socket 权限等运维细节。

相关文章