#author("2025-09-06T11:11:32+09:00","default:pengwei-admin","pengwei-admin") #author("2025-09-06T17:43:46+09:00","default:pengwei-admin","pengwei-admin") [[php/FPM/CLI]] #contents *PHP-FPM 和 PHP CLI 是 PHP 的两种运行模式,它们各自适用于不同的场景。 [#e4c394c5] --- ## 🚀 什么是 PHP-FPM(FastCGI Process Manager) PHP-FPM 是 PHP 的一种运行方式,它实现了 FastCGI 协议,并提供了进程管理功能。它的主要作用是: - **处理 Web 请求**:当用户访问网站时,Web 服务器(如 Nginx 或 Apache)会将 `.php` 请求交给 PHP-FPM 来处理。 - **高性能并发处理**:PHP-FPM 会预先启动多个 PHP 工作进程,避免每次请求都重新启动 PHP,提升性能。 - **资源管理**:可以配置最大进程数、空闲进程数、请求超时等参数,灵活控制服务器资源。 - **与 Web 服务器解耦**:PHP-FPM 作为独立服务运行,Web 服务器通过 FastCGI 协议与它通信。 📍适用于:**Web 应用场景**,如网站、API 服务等。 --- ## 🧑💻 什么是 PHP CLI(Command Line Interface) PHP CLI 是 PHP 的命令行接口,允许你在终端中直接运行 PHP 脚本。它的特点是: - **无需 Web 服务器**:直接在命令行运行 `.php` 文件。 - **适合脚本任务**:如定时任务(crontab)、数据处理、自动化脚本等。 - **长时间运行不受限制**:不像 Web 请求有超时限制,CLI 脚本可以运行很久。 - **调试方便**:开发者可以快速测试 PHP 代码。 📍适用于:**后台任务、脚本执行、开发调试**。 --apt install php = php_CLI --- ## 🔍 对比总结 | 特性 | PHP-FPM | PHP CLI | |------|---------|---------| | 启动方式 | 由 Web 服务器通过 FastCGI 调用 | 直接在命令行运行 | | 使用场景 | 网站请求处理 | 后台任务、定时脚本 | | 性能 | 高并发优化,进程池管理 | 单进程执行 | | 是否需要 Web 服务器 | 是 | 否 | | 是否支持 HTTP 请求 | 是(通过 Web 服务器) | 否 | --- ## 🎯 举个例子 - 如果你在做一个网站,用户访问 `index.php`,你需要用 PHP-FPM。 - 如果你写了一个脚本 `backup.php`,每天凌晨自动备份数据库,那就用 PHP CLI。 --- *PHP-FPM 和 PHP CLI 各自使用不同的 `php.ini` 文件路径**,它们是分开的配置`php.ini` 是 PHP 的主配置文件 [#cfef8811] --- ## 🧩 两者使用的 `php.ini` 路径不同 | 模式 | 使用的配置文件路径 | 查看方式 | |------|---------------------|-----------| | **PHP CLI** | `/etc/php/8.1/cli/php.ini` | 运行 `php --ini` | | **PHP-FPM** | `/etc/php/8.1/fpm/php.ini` | 查看 `phpinfo()` 页面或运行 `php-fpm -i` | --- ## 🔍 为什么要分开? 因为 CLI 和 FPM 的运行环境不同,需求也不同: - **CLI**:适合长时间运行的脚本,比如备份、数据处理。可以设置较长的 `max_execution_time`。 - **FPM**:用于 Web 请求处理,通常需要更短的超时时间、更严格的资源限制。 --- ## 🛠️ 如何确认当前使用的是哪个配置文件? - **PHP CLI**: ```bash php --ini ``` 输出中会显示: ``` Loaded Configuration File: /etc/php/8.1/cli/php.ini ``` - **PHP-FPM**: 在网页中运行: ```php <?php phpinfo(); ?> ``` 页面中会显示: ``` Loaded Configuration File => /etc/php/8.1/fpm/php.ini ``` --- ## ✅ 总结 - `php.ini` 是核心配置文件,但 CLI 和 FPM 各自有独立的版本。 - 修改 CLI 的配置不会影响 FPM,反之亦然。 - 要根据你的运行环境修改对应的 `php.ini`。 - CLI の PHP(apt install php)は /etc/php/8.1/cli/php.ini を使いますが、 OpenLiteSpeed の PHP は /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini を使います。 可以这么理解:**lsphp 是一种类似 PHP-FPM 的运行方式,但它不是 PHP-FPM 本身,而是专门为 LiteSpeed 和 OpenLiteSpeed Web 服务器优化的 PHP 处理器**。 --- ## 🔍 什么是 lsphp? `lsphp` 是 **LiteSpeed PHP** 的简称,它是 PHP 的一种 SAPI(Server API)实现,使用的是 **LSAPI(LiteSpeed API)协议**,而不是传统的 FastCGI 协议。 它的作用和 PHP-FPM 类似: - 都是用来处理 Web 请求中的 PHP 脚本 - 都是以独立进程运行 - 都可以通过 socket 或端口与 Web 服务器通信 但区别在于: | 特性 | lsphp | PHP-FPM | |------|-------|---------| | 协议 | LSAPI(LiteSpeed 专用) | FastCGI | | 适用服务器 | LiteSpeed / OpenLiteSpeed | Nginx / Apache(mod_proxy_fcgi)等 | | 性能 | 更快的启动和通信效率(针对 LiteSpeed 优化) | 通用但略慢 | | 配置方式 | 通常通过 LiteSpeed 面板或配置文件 | 通过 `php-fpm.conf` 和 `php.ini` | --- ## ✅ lsphp 是 PHP-FPM 的“替代品” 你可以把它看作是: > “LiteSpeed 专属的 PHP-FPM”。 它实现了类似的功能,但用的是 LiteSpeed 自家的协议和优化方式。 如果你用的是 LiteSpeed 或 OpenLiteSpeed,**推荐使用 lsphp 而不是 PHP-FPM**,因为性能更好、兼容性更强。 --- ## 🧠 补充小知识 - 在 cPanel 或 Plesk 面板中,很多服务器默认使用 `lsphp` 来处理 PHP。 - lsphp 进程在系统中也会显示为 `lsphp`,而不是 `php-fpm`。 - 它也有自己的配置文件路径,比如 `/usr/local/lsws/lsphpXX/etc/php.ini`。 --- 如果你正在配置 Web 环境,我可以帮你判断是否该用 lsphp、php-fpm,或者其他方式(比如 mod_php)。你现在是用哪种 Web 服务器呢?Nginx、Apache 还是 LiteSpeed?