再次探究php-cli和php-fpm:
1>加载的php.ini文件(docker环境下)
root@ca4989b3147e:/usr/local/etc# php-fpm -i | grep 'php.ini'
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
/usr/local/etc/php/conf.d/php.ini
root@ca4989b3147e:/usr/local/etc# php -i | grep 'php.ini'
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
/usr/local/etc/php/conf.d/php.ini
通过上面的信息可以知道:
PHP-CLI 和 PHP-FPM 会共享相同的配置,包括扩展加载、内存限制等。
如果你在这个 php.ini 中做了修改,比如调整 memory_limit 或者添加扩展模块配置,两个环境都会受到影响。
也可以:
php --ini 查看所有的ini配置,如下:
root@ca4989b3147e:/usr/local/etc/php/conf.d# php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File: /usr/local/etc/php/php.ini
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed: /usr/local/etc/php/conf.d/date.ini,
/usr/local/etc/php/conf.d/docker-fpm.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sockets.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xsl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini,
/usr/local/etc/php/conf.d/php.ini
2>docker环境下,默认php镜像会有如下环境变量 $PHP_INI_DIR, 会默认创建, 所以可以直接在脚本里面使用
root@ca4989b3147e:/usr/local/etc# echo $PHP_INI_DIR
/usr/local/etc/php
3>二者之间的关系 理解 PHP-CLI 和 PHP-FPM 之间的关系同样重要。两者都是 PHP 的运行模式,但它们适用于不同的场景和用途。让我们深入探讨一下它们的区别和联系。
PHP-CLI(PHP Command Line Interface)
- PHP-CLI 是 PHP 的命令行接口,用于在命令行下执行 PHP 脚本。
- 这种模式不涉及 Web 服务器,因此它没有像 PHP-FPM 一样的请求处理机制。
- PHP-CLI 主要用于执行脚本,通常是用于命令行工具、任务调度器、脚本自动化、测试等场景。
- 它适用于单独运行脚本,不依赖于 Web 服务器。
特点:
- 直接通过命令行执行 PHP 脚本(例如,
php myscript.php)。 - 不依赖 Web 服务器,独立于 HTTP 请求。
- 配置文件(
php.ini)通常位于/etc/php/cli或类似目录。 - 没有请求处理和进程池管理的复杂性。
PHP-FPM(PHP FastCGI Process Manager)
- PHP-FPM 是一个 PHP 的进程管理器,专门用来处理 Web 服务器(如 Nginx 或 Apache)通过 FastCGI 协议发来的 PHP 请求。
- 它是为高并发的 Web 环境设计的,可以处理多个并发请求,通过配置进程池来高效管理 PHP 进程。
- PHP-FPM 主要应用于生产环境,尤其是与 Web 服务器结合使用时,它通过 FastCGI 协议来接收和响应 Web 服务器的请求。
特点:
- 与 Web 服务器(如 Nginx 或 Apache)结合,处理来自浏览器的 HTTP 请求。
- 通过 FastCGI 协议与 Web 服务器交互。
- 配置文件(
php.ini和php-fpm.conf)通常位于/etc/php-fpm.d/或类似目录。 - 具有进程池、负载均衡、动态进程管理等高级特性。
PHP-CLI 与 PHP-FPM 的关系
虽然 PHP-CLI 和 PHP-FPM 都是运行 PHP 的方式,它们的主要区别在于使用场景和处理方式:
- PHP-CLI 用于 命令行执行,直接运行 PHP 脚本,通常不涉及 Web 请求。它是 PHP 的 "独立模式"。
- PHP-FPM 用于 Web 环境,通过 FastCGI 协议与 Web 服务器(如 Nginx 或 Apache)配合工作,处理 HTTP 请求。
如何切换:CLI 与 FPM 之间的不同
- CLI 模式下,执行的 PHP 脚本并不需要 Web 服务器的支持,也不需要处理 HTTP 请求。它更多用于后台任务或批量处理。
- FPM 模式下,PHP 被配置为与 Web 服务器(如 Nginx)一起工作,处理用户发来的 HTTP 请求。这意味着 PHP 进程池的管理和资源分配变得更加重要。
总结
- PHP-CLI 是命令行接口,适用于脚本执行,常用于开发、测试和后台任务。
- PHP-FPM 是 PHP 的进程管理器,专为 Web 环境设计,通过 FastCGI 协议与 Web 服务器协同工作处理 PHP 请求。
两者的选择取决于你要运行 PHP 的环境:是处理 Web 请求,还是执行后台任务。
