浅谈PHP中的fastcgi和php-fpm

本篇文章给大家简单介绍一下php中的fastcgi和php-fpm。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

浅谈PHP中的fastcgi和php-fpm

讲到PHP开发,就一定会提到fastcgi和php-fpm,这两个东西对PHP的性能有着至关重要的作用。在百度实习的这段时间里,用到的ODP环境就是用的php-fpm,但一直以来对它一无所知,甚至对整个PHP都概念模糊,这两天任务提前完成,借此机会对PHP做一点深入的了解。

Web服务器

PHP作为一种专门为Web开发而生的服务端语言,其实现必须借助Web服务器,常见的PHP架构有LAMP和LNMP,找张图片解释了PHP的访问情况。

立即学习“PHP免费学习笔记(深入)”;

EF5QIHT~]%`]DBPTGEAWVIN.png

Apache处理PHP请求

mod_php模式

可以看出请求是发送到Apache,之后由Apache来解析处理PHP并返回结果给客户端。当我们使用LAMP架构时,需要改动Apache的配置文件httpd.conf

加入如下两句LoadModule phpx_module PHP_ROOT/phpxapache2_2.dllAddType appliaction/x-httpd-php.php将下面语句做如下修改 DirectoryIndex index.html改为  DirectoryIndex index.html index.htm index.php index.phtml

登录后复制

使用LoadModule来加载phpx_module(x为PHP版本号)。可以理解为将PHP作为Apache的一个子模块来运行,当请求访问PHP时,Apache就会调用phpx_module来解析PHP代码。

php_module是如何解析PHP代码的呢?——通过sapi。

Apache和PHP与sapi的关系如下图:

8BO%_J97)OFV8E4KCHLL[_Y.png

sapi就是一个中间层,提供和外部通信的接口,类似于socket,使得PHP可以和其他应用进行数据交互。PHP提供了多种sapi,如给Apache和Nginx的php_module,给IIS的ISAPI等。

Apache调用PHP的执行过程:

Apache -> httpd -> php_module -> sapi -> PHP

总之,Web服务器通过php_module方式解析执行PHP的模式即为mod_php。

mod_fastcgi模式

PHP的sapi的另一种方式就是提供cgi模式,现在cgi已经被fastcgi取代。

所谓cgi,就是common gateway interface,当Web服务器收到请求,就会把请求交给cgi程序(如PHP的fastcgi),cgi就将请求做处理(解析PHP),然后将结果返回给Web服务器,Web服务器再将请求返回给客户端。

cgi的不足之处就是每次请求都会有启动和退出的过程,也就是饱受诟病的fork-and-execute模式,在大量并发的请况下就完蛋了。

fastcgi的诞生弥补这一不足,它的原理是早早启动好等待请求,在响应完请求后不会退出,继续等待下一个请求。

利用fastcgi的运行方式称为mod_fastcgi。

对比一下mod_php和mod_fastcgi的不同。前者是将PHP作为Web服务器的一个模块来运行,PHP与服务器结合度大。后者是将fastcgi作为中间过程,PHP和Web服务器只通过fastcgi来完成请求与响应。

JALES4K[Y92R)V3S2$[DJYK.png

mod_php模式

mod_php模式下,Apache每接受一个请求,就会产生一个进程来连接PHP通过sapi完成请求,在高并发的情况下,显然服务器会无法承受。

}42[ZH9VHMSXW1L@[K]~3B3.png

mod-fastcgi模式

这张图可以看出,每当有请求到达时,httpd会调用sapi将请求传递给PHP,完成后不退出,等待下一请求。并发性能大大提高。

php-fpm

磨刀不误砍柴工,前面的讲解只为引出php-fpm。php-fpm是做什么的呢?其实就是用来辅助fastcgi的。

fastcgi是一种与平台无关,与语言无关的接口实现,只需要不同语言按照规定方式实现即可完成与Web服务器的通信。上图所示的php-cgi就是PHP自带的fastcgi管理器。

网上看到的php-cgi的问题主要有两点:

php-cgi变更php.ini陪之后需要重启php-cgi才能使新的php.ini生效,不能平滑重启。

若直接杀死php-cgi,PHP便无法运

php-fpm完美解决了上述不足,是一款专用的fastcgi管理器。

总之,php-fpm的作用就是专门管理PHP中的fastcgi,使PHP在高并发的情况下也能安全稳定的与Web服务器合作,完成请求响应过程。

推荐学习:php视频教程

以上就是浅谈PHP中的fastcgi和php-fpm的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2511768.html

(0)
上一篇 2025年3月5日 14:39:15
下一篇 2025年3月1日 07:51:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php pdo连接怎么关闭

    php pdo连接关闭的实现方法:首先创建一个PHP示例文件;然后连接到MySQL;最后通过“$dbh = null;”方法关闭连接即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php pdo连接怎么关闭?…

    2025年3月5日
    200
  • php上传找不到临时目录怎么办

    php上传找不到临时目录的解决办法:1、在配置文件中设置临时文件夹;2、设置临时文件夹或者上级文件夹的相应权限即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php上传文件 找不到临时文件夹(解决方法) 找不…

    2025年3月5日
    200
  • php数组怎么改变下标

    php数组改变下标的方法:首先创建一个PHP示例文件;然后定义两个数组;最后通过“array_merge($a1,$a2)”方法修改并重新排列数组下标即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php数组…

    2025年3月5日
    200
  • php图片怎么转为二进制

    php图片转为二进制的方法:1、通过fread函数读取打开的文件;2、通过file_get_contents函数读取图片,并转为二进制数据即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php 图片转二进制数…

    2025年3月5日
    200
  • win8 php不是内部命令怎么办

    win8 php不是内部命令的解决办法:1、直接进入cd,然后执行php命令;2、检查“C:Program FilesEasyPHP-12.1phpphp.exe”是否存在并修改即可。 本文操作环境:Windows8系统、PHP7.1版,D…

    2025年3月5日
    200
  • php怎么设置文件777权限

    在php中可以通过“chmod($directory, 0777);”方法设置文件777权限,其中chmod函数就是用于改变文件模式。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php怎么设置文件777权限? …

    2025年3月5日
    200
  • php 数组怎么增加数据

    php数组增加数据的方法:首先创建一个PHP示例文件;然后定义一个数组;最后通过“array_push($a,44);”方法向该数组增加新数据即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 PHP向数组添加新…

    2025年3月5日
    200
  • php 二维数组怎么删除某个字段

    php二维数组删除某个字段的方法:首先创建一个PHP示例文件;然后使用array_walk和array_diff两个函数来删除数组中某个字段即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php 二维数组怎么…

    2025年3月5日
    200
  • 一分钟带你了解PHP中的预处理语句及事务

    本篇文章给大家介绍一下php中的预处理语句及事务。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 PHP中的PDO操作学习(二)预处理语句及事务 今天这篇文章,我们来简单的学习一下 PDO 中的预处理语句以及事务的使用,它…

    2025年3月5日
    200
  • php怎么安装xdebug扩展

    php安装xdebug扩展的方法:1、进入xdebug官网;2、在用户下载引导页面粘贴当前phpinfo信息;3、下载插件,并将插件放于指定目录;4、加入xdebug设置;5、查看插件是否安装成功;6、配置phpstorm即可。 本文操作环…

    2025年3月5日 编程技术
    200

发表回复

登录后才能评论