634 字
3 分钟
PHP 常见运行模式 SAPI 简述
很多人第一次排查 PHP 配置时都会困惑:
同一台机器上,为什么 php -i 看到的值,和 Web 请求实际行为对不上?
核心原因通常不是配置失效,而是你查的是不同运行模式(SAPI)的配置。
什么是 PHP 运行模式(SAPI)
SAPI(Server API)可以理解为 PHP 与外部环境交互的“运行接口”。
常见模式有:
| SAPI 模式 | 典型使用场景 | 常见配置文件位置 |
|---|---|---|
| CLI | 终端脚本、计划任务、一次性命令 | /etc/php/8.3/cli/php.ini |
| FPM | Nginx + PHP-FPM 的 Web 请求 | /etc/php/8.3/fpm/php.ini |
| Apache | Apache mod_php 模式 | /etc/php/8.3/apache2/php.ini |
| CGI | 传统 CGI 方式 | /etc/php/8.3/cgi/php.ini |
这些配置彼此独立。相同参数在不同 SAPI 中可以是不同值。
为什么要按运行模式拆分配置
因为不同场景目标不同:
- CLI 更偏任务执行:可能需要更长执行时间、更大内存。
- Web 请求更偏稳定性:通常需要更严格超时与资源限制。
如果只有一套配置,往往会出现冲突:
- 对 CLI 合适的设置,可能让 Web 风险升高。
- 对 Web 合适的限制,可能让 CLI 任务频繁失败。
按 SAPI 隔离配置,本质上是“按场景定策略”。
一个快速判断技巧
看路径中的目录名即可识别 SAPI:
/etc/php/8.3/cli/php.ini # CLI/etc/php/8.3/fpm/php.ini # FPM/etc/php/8.3/apache2/php.ini # Apache/etc/php/8.3/cgi/php.ini # CGI排查时最容易犯的错
很多人会直接用:
php -i这条命令只反映 CLI 的配置视角。
如果你在排查 Web 请求行为,应优先看对应 Web SAPI(通常是 FPM 或 Apache)的配置。
正确排查姿势
1)确认当前请求经过哪个 SAPI
先确认部署链路是 Nginx -> FPM,还是 Apache mod_php,再决定查哪个 php.ini。
2)查看对应 SAPI 的运行信息
php-fpm8.3 -i | grep upload_max_filesize关键点是命令要用对应二进制(如 php-fpm8.3),而不是 php。
3)直接核对目标配置文件
sudo grep -E "^upload_max_filesize|^post_max_size" /etc/php/8.3/fpm/php.ini隐藏坑:conf.d 会覆盖主配置
每个 SAPI 除了主 php.ini,通常还会加载 conf.d 目录中的附加配置:
ls /etc/php/8.3/fpm/conf.d/这些附加文件中的同名项可能覆盖主配置,所以会出现“改了 php.ini 却不生效”的现象。
可通过以下方式确认加载链:
php-fpm8.3 -i | grep -E "Loaded Configuration|Additional .ini"总结
一句话记住:
php -i只代表 CLI;你要排查哪个运行模式,就查那个 SAPI 的配置与加载链。
只要先分清 SAPI,再谈参数调优,PHP 配置排查会清晰很多。
PHP 常见运行模式 SAPI 简述
https://blog.cuixu.cn/posts/php/php-cli-vs-fpm-ini/