PHP的运行模式

一、PHP运行原理

我们先了解php的底层运行原理,php的核心架构是一个四层模型,如下图。

各层架构的职责
Zend Engine

PHP的"大脑"和"心脏"。负责将PHP代码编译为中间指令(opcode),并执行这些指令。同时管理内存、变量(zval)和核心数据结构。
Extensions

PHP的"功能模块"或"工具箱"。大部分内置函数(如array系列)、标准库(如JSON、PDO、REDIS)都是通过扩展实现。你可以开发自定义扩展来添加新功能或优化性能。
SAPI

PHP与外部环境的"适配器"。它定义了PHP如何与不同的服务器(如Apache、Nginx)或命令行(CLI)进行数据交换,从而将PHP与具体的运行环境解耦。
上层应用

开发者编写的PHP脚本。这是架构的顶层,通过SAPI被调用,并最终由下层各组件支撑运行。

二、PHP的执行流程

然后看一下PHP的执行流程。

三、FAST-CGI模式

1、FAST-CGI模式

PHP进程由独立管理器(如PHP-FPM)常驻维护,处理多个请求,减少启动开销,支持进程池、负载均衡和健康检查,是当前主流生产环境部署方式,尤其配合Nginx使用。‌工作流程如下图所示:

2、CLI命令行模式

PHP可以在命令行界面中直接执行脚本,无需Web服务器支持,适用于批处理任务、自动化运维、定时任务(如crontab)或单元测试,通过php script.php命令运行,错误信息直接输出到终端,适合后台处理。

3、模块模式(Module)

PHP可以编译为Apache的模块(如mod_php),直接嵌入Apache服务器中;

适用于小型到中型Web应用,特别是那些与Apache紧密集成的应用;

优点:配置简单,集成度高;

缺点:与Apache紧密耦合,灵活性较低;在高并发场景下性能可能不如FastCGI。

4、常驻内存模式

Webman 的内存管理本质是 进程常驻 + 内存复用 + 按需回收:

进程启动时加载核心资源,常驻内存减少重复开销;

请求仅分配临时内存,结束后自动释放,核心资源复用;

通过进程重启、连接池、协程等机制避免内存泄漏和碎片化;

以 "进程隔离" 为基础,平衡性能与内存安全。

相比 PHP-FPM,Webman 内存利用率更高(复用核心内存),但需重点关注内存泄漏问题,通过合理配置进程重启策略、规范代码编写,可最大化发挥其内存优势。

四、总结

无论哪种模式,都使用相同的 Zend 引擎,语法解析、编译执行过程一致。选择合适的PHP运行模式取决于多种因素,包括应用的规模、性能需求、运维复杂性以及开发团队的熟悉程度。对于小型应用或开发测试环境,CLI或Apache模块可能足够;对于大型、高并发的生产环境,FastCGI(特别是PHP-FPM)、webman(Swoole)通常是更好的选择。

相关推荐
是立不是利12 分钟前
前端交互基石:深入剖析JavaScript三级联动背后的设计哲学
开发语言·前端·javascript
老刘的望远镜21 分钟前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
java·开发语言·javascript
Littlehero_12130 分钟前
QT自定义控件之电气接线图(源码开源)
开发语言·qt
中科三方44 分钟前
DNS拨测到底在拨测什么?
开发语言·github·php·dns·云拨测
软件黑马王子1 小时前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
李少兄1 小时前
Java 中只有值传递吗?
java·开发语言·python
企业通信技术笔记1 小时前
企业IM内外网隔离部署:DNS、证书、WebSocket与跨网接口设计
websocket·网络协议·架构·php·信息与通信
可乐鸡翅yeah_2 小时前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
szarron2 小时前
RF Demo Kit|NanoVNA 射频演示测试板完整上手教程,滤波器、衰减器、SOLT 校准学习板
开发语言·人工智能·学习·php·射频工程·频谱仪
边境悍匪2 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云