【面试题28】什么是PHP-FPM?它与PHP和Nginx有什么关系

这篇具有很好参考价值的文章主要介绍了【面试题28】什么是PHP-FPM?它与PHP和Nginx有什么关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、前言

本文已收录于PHP全栈系列专栏:PHP面试专区。
计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。文章来源地址https://www.toymoban.com/news/detail-534287.html

二、什么是PHP-FPM?

PHP-FPM(FastCGI Process Manager)是PHP的FastCGI进程管理器,它是PHP 5.3.3及更高版本的一部分。它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能,并且可以与Web服务器(如Nginx、Apache等)进行通信。

【面试题28】什么是PHP-FPM?它与PHP和Nginx有什么关系,PHP面试题专区,php,nginx,开发语言

三、PHP-FPM的生命周期

PHP-FPM的生命周期包括启动、初始化、请求处理和关闭四个主要阶段。

3.1 启动阶段

在启动阶段,PHP-FPM会读取配置文件(通常是php-fpm.conf)中的设置,并根据这些设置初始化进程池(worker pool)。进程池中包括多个子进程,每个子进程负责处理一个请求。

3.2 初始化阶段

在初始化阶段,PHP-FPM会加载PHP解析器和其他必要的模块,并预先分配一定数量的子进程用于处理请求。这些子进程可以根据配置文件中的设置自动增加或减少。

3.3 请求处理阶段

在请求处理阶段,当Web服务器(如Nginx)接收到一个HTTP请求后,会将该请求转发给PHP-FPM处理。PHP-FPM会从进程池中选取一个可用的子进程来处理请求,并通过FastCGI协议与该子进程进行通信。

子进程接收到请求后,会加载相应的PHP脚本,并执行脚本中的代码。在处理完请求后,子进程会将处理结果返回给PHP-FPM,然后再由PHP-FPM返回给Web服务器,最终返回给客户端。

3.4 关闭阶段

在关闭阶段,当PHP-FPM接收到关闭信号(如SIGINT)时,它会停止接收新的请求,并等待已有的请求处理完毕。同时,PHP-FPM会关闭所有子进程,释放资源并退出。

四、PHP-FPM与PHP的关系

PHP是一种脚本语言,而PHP-FPM是PHP的一个运行环境。它们之间的关系可以类比于Java和Tomcat的关系,PHP是一门语言,而PHP-FPM是一种用于解析和执行PHP脚本的环境。

PHP-FPM通过提供一个进程管理器来提高PHP脚本的执行效率和性能,使得PHP可以更好地与Web服务器进行通信,并处理大量并发请求。

五、PHP-FPM与Nginx的通信方式

PHP-FPM与Nginx之间通过FastCGI协议进行通信。FastCGI是一种高性能的CGI协议扩展,它通过在Web服务器和PHP-FPM之间建立一个长连接来提供更高的性能和效率。

具体的通信过程如下:

  1. Nginx接收到一个HTTP请求后,将其转发给PHP-FPM处理。
  2. PHP-FPM监听在一个特定的端口上,并等待来自Nginx的请求。
  3. Nginx通过FastCGI协议将HTTP请求转换成一个二进制数据流,并发送给PHP-FPM。
  4. PHP-FPM接收到这个二进制数据流后,解析出HTTP请求的内容。
  5. PHP-FPM调用相应的PHP脚本并执行,然后将执行结果转换成一个二进制数据流,并发送回Nginx。
  6. Nginx将PHP-FPM返回的二进制数据流解析为HTTP响应,并发送给客户端。

这种基于FastCGI协议的通信方式可以实现高效的请求处理和资源共享,提高Web应用的性能和可靠性。

六、总结

PHP-FPM是PHP的FastCGI进程管理器,它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能。PHP-FPM与Nginx通过FastCGI协议进行通信,实现高效的请求处理和资源共享。

了解PHP-FPM的生命周期和与PHP、Nginx的关系及通信方式,可以帮助我们更好地理解PHP-FPM的工作原理和优势,从而提高PHP应用的性能和可靠性。

本文已收录于PHP全栈系列专栏:PHP面试专区。
计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。

到了这里,关于【面试题28】什么是PHP-FPM?它与PHP和Nginx有什么关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux系统下配置Nginx使部分URL使用多套自定义的PHP-FPM配置

    1. Tcp默认的9000端口通信: php-fpm配置:listen = 127.0.0.1 与nginx进程通信:fastcgi_pass 127.0.0.1:9000; 优点: 使用网络传输,可以跨服务器。 TCP通信有一些校验机制,具有更高的稳定性。 缺点: 性能略微比socket差。 2. Unix Socket(套接字)通信: php-fpm配置 :listen = /tmp/php-cgi.sock 与

    2024年02月08日
    浏览(49)
  • PHP-FPM与Nginx通信报 502 Bad Gateway或504 Gateway Timeout终极解决方案(适用于PHP执行耗时任务情况下的报错)

    适用于常规请求都没问题,但是执行某些php脚本需要超过一分钟的情况下的502/504,并不是任何请求都502/504的情况(这说明php-fpm或者nginx配置错误)。 执行脚本时间太长,期间php没有返回任何的数据。 php-fpm超时,nginx没超时 。nginx认为php-fpm罢工了,然后抛出了异常。 执行脚

    2024年02月08日
    浏览(58)
  • php-fpm设置开机启动

    看了nginx和redis的shell启动脚本,发现服务的开启和关闭其实就是操作服务进程号,那么给php服务也写个shell脚本,也能实现service start 和 stop   进入Linux服务的初始化目录 创建phpfpmd进程脚本(进程控制脚本规范上默认都加后缀d)  第一行,说明shell的运行环境,有些服务器默

    2023年04月18日
    浏览(43)
  • php-fpm未授权访问漏洞

    目录 一、产生原因 二、利用条件 三、过程原理 四、复现过程 php-fpm配置不当,fastcgi_pass这里配置了0.0.0.0,将fastcgi接口暴露在公网,任何人都可以利用接口对php-fpm发送fastcgi协议数据,更改php.ini配置文件,导致远程代码执行 此漏洞属于配置不当,因此影响所有php版本 php-f

    2024年02月09日
    浏览(45)
  • linux下查看php进程,开启php-fpm&杀死php进程

    1、查看php进程 出现如图结果说明未开启 2、查看php安装路径 3、开启php-fpm 再次查看ps -ef |grep php 以树状图的方式展现php进程 4、关闭php-fpm

    2024年02月11日
    浏览(45)
  • PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别

    PHP CGI、FastCGI、PHP-FPM、PHP-CGI 是不同的PHP执行方式和处理程序。它们有以下区别: PHP CGI (Common Gateway Interface):PHP CGI是一种通过CGI协议与Web服务器通信的PHP执行方式。在每次请求时,Web服务器会将请求传递给PHP解释器,PHP解释器会解析并执行PHP脚本,并将结果返回给Web服务器

    2024年02月11日
    浏览(46)
  • 利用Fastcgi+PHP-FPM非授权访问实现代码执行

    目录 Fastcgi Record Fastcgi Type PHP-FPM(FastCGI进程管理器) Nginx(IIS7)解析漏洞 security.limit_extensions配置 漏洞演示 今天要和大家分享的是利用Fastcgi和PHP_FPM实现未授权访问实现代码执行,首先我们需要知道cgi、fastcgi和php-fpm这些都是什么。 什么是CGI CGI全称是“公共网关接口”(Co

    2024年01月21日
    浏览(50)
  • Docker搭建LNMP环境实战(08):安装php-fpm

    在文件夹:/mnt/hgfs/dockers/test_site/www目录下创建文件:test.php,内容为: 在文件夹:/mnt/hgfs/dockers/test_site/compose下创建文件:test_site_php.yml,内容如下: 注意:此文件中网络的名称和nginx配置文件中网络的名称是相同的,都是:test_site_network 注意:最后一段为新加的修改 图1 f

    2024年04月13日
    浏览(44)
  • 面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别?

    面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别? TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScript。 JavaScript是一种广泛应用于Web开发的脚本语言,它的灵活性和易用性使得它成为了开发者们的首选。然而,Jav

    2024年02月15日
    浏览(49)
  • 【Flutter 面试题】Flutter 是什么?它与其他移动开发框架有什么不同?

    👏🏻 正在学 Flutter 的同学,你好! 😊 本专栏是解决 Flutter 面试过程中可能出现的问题,而进行汇总整理的。一个问题一篇文章,尽可能详细解答,满足面试需求。 🔍 想解决开发中的零散问题?碎片化教程 👉 Flutter Tips 。 🔍 想深入学习 Flutter?系统化教程 👉 Flutter 从

    2024年01月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包