指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

再次探究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 服务器。
特点:
  1. 直接通过命令行执行 PHP 脚本(例如,php myscript.php)。
  2. 不依赖 Web 服务器,独立于 HTTP 请求。
  3. 配置文件(php.ini)通常位于 /etc/php/cli 或类似目录。
  4. 没有请求处理和进程池管理的复杂性。
PHP-FPM(PHP FastCGI Process Manager)
  • PHP-FPM 是一个 PHP 的进程管理器,专门用来处理 Web 服务器(如 Nginx 或 Apache)通过 FastCGI 协议发来的 PHP 请求。
  • 它是为高并发的 Web 环境设计的,可以处理多个并发请求,通过配置进程池来高效管理 PHP 进程。
  • PHP-FPM 主要应用于生产环境,尤其是与 Web 服务器结合使用时,它通过 FastCGI 协议来接收和响应 Web 服务器的请求。
特点:
  1. 与 Web 服务器(如 Nginx 或 Apache)结合,处理来自浏览器的 HTTP 请求。
  2. 通过 FastCGI 协议与 Web 服务器交互。
  3. 配置文件(php.ini 和 php-fpm.conf)通常位于 /etc/php-fpm.d/ 或类似目录。
  4. 具有进程池、负载均衡、动态进程管理等高级特性。
PHP-CLI 与 PHP-FPM 的关系

虽然 PHP-CLI 和 PHP-FPM 都是运行 PHP 的方式,它们的主要区别在于使用场景和处理方式:

  1. PHP-CLI 用于 命令行执行,直接运行 PHP 脚本,通常不涉及 Web 请求。它是 PHP 的 "独立模式"。
  2. 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 请求,还是执行后台任务。