PHP 五种运行模式_php运行模式-程序员宅基地

技术标签: 网站开发  cgi  fastcgi  PHP  php  

目录

简介

CGI

FastCGI

运行流程

优点

缺点

CLI

mod_PHP

ISAPI


简介

CGI

CGI的全称是Common Gateway Interface,即公共网关接口。

CGI的作用是帮助服务器和语言通信,例如帮助Nginx和PHP通信。Nginx服务器在接收到浏览器传递过来的用户请求后,如果浏览器端请求的是无需动态处理的资源文件【如静态页面、图片等】,就直接根据请求的url找到资源文件并返回给浏览器,这时无需PHP参与。如果浏览器端请求的是动态页面,那么这时Nginx就需要与PHP通信,这时就会需要用到CGI协议,将请求数据转换为PHP能理解的信息,在接收到PHP处理完请求数据后的返回值时,会通过CGI协议将其转换为Nginx可以理解的信息,然后再由Nginx将这些信息返回给浏览器。

每处理一个用户请求,CGI模式下都会创建一个子进程。因此当并发用户请求数量很多时,会导致CPU资源被大量占用,处理用户请求效率低下。

PHP-CGI是PHP提供给Web server【HTTP 前端服务器】的CGI协议接口程序,处理每一个Web请求时,需要重新解析PHP.ini、重新载入dll拓展、重新初始化数据结构,处理完请求后就结束创建的进程。如果更改了PHP配置,那么需要重启PHP-CGI才能生效。

FastCGI

FastCGI是CGI的升级版本,接口方式采用C/S架构。

FastCGI像是一个常驻型【long-live】的CGI,只要激活后,可以一直执行。

PHP-FPM是PHP提供给Web Server【HTTP 前端服务器】的FastCGI协议接口程序。使用PHP-FPM时,只需要在FastCGI进程启动时解析PHP.ini、载入dll拓展、初始化数据结构,能提供持续的数据库连接,而不必对每个Web请求都重新来一遍。PHP-FPM允许一个进程对多个连接进行处理,可以说它是PHP-CGI的一个管理程序,是对PHP-CGI的改进。

由于PHP-FPM是多进程的,而一个PHP-CGI基本消耗7-25M内存,因此如果PHP-CGI连接数过多就会导致内存消耗很大,并引发一些问题,例如Nginx的502错误【Bad Gateway,网关错误】。

运行流程

1.网站服务器【Web Server】启动时载入FastCGI进程管理器【IIS ISAPI或Apache Module】。

2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程【php-cgi.exe】并等待网站服务器的连接。

3.当客户端请求到达网站服务器后,FastCGI进程管理器选择并连接到一个CGI解释器进程【PHP-CGI】,将标准输入信息传递给它。

4.CGI解释器进程处理完标准输入信息后,将标准输出和错误信息从同一连接处经FastCGI进程管理器返回给网站服务器,然后关闭与FastCGI进程管理器的连接,继续等待来自FastCGI进程管理器的下一个连接,而非直接结束。

优点

1.稳定性强。FastCGI是以独立的进程池来运行CGI,单独一个进程异常结束,系统可以重新分配新的进程来继续处理标准输入信息。

2.独立性高。例如PHP-FPM和Nginx是两个独立的个体,一般不会因为FastCGI异常崩溃而导致整个网站服务器崩溃。

3.性能高。FastCGI把动态逻辑的处理从网站服务器中分离出来,这样网站服务器可以高效处理IO。FastCGI还支持分布式运算。

缺点

1. 一个FastCGI进程如果执行时间过长可能会被系统当做是失效进程而重启,这样在处理长时间任务是会很麻烦。

2. 因为和Web Server【如Nginx】各自独立存在,所以可能需要单独调试和监控。

CLI

PHP-CLI全称是PHP Command Line Interface,即PHP在命令行运行的接口。

优点:

1.使用多进程,子进程结束后,内核会负责回收资源。

2.子进程异常退出不会导致整个进程退出,父进程还能重建流程。

3.一个常驻主进程,只负责任务分发,逻辑更清楚。

用PHP命令行查看PHP已安装的拓展:

        php -m

用PHP命令行查看PHP命令的帮助信息:

        php -h

mod_PHP

mod_PHP模式即是指模块模式,它是apache在CGI的基础上进行的一种拓展,以加快PHP的运行效率。

在模块模式中,PHP是与Web服务器一起启动并运行的。对于Apache2来说,PHP模块通过注册apache的ap_hook_post_config挂钩,跟随Apache的启动而启动,以接受PHP文件的请求。

除了启动时加载,Apache还可以在运行时动态加载模块,这意味着对服务器可以进行功能拓展而不需要重新对源代码进行编译,更不需要停止服务器。

在给Apache动态加载模块前,需要将要加载的模块编译为动态链接库。Apache动态加载模块时加载的就是动态链接库,需要给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块,

Apache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进Apache的核心,因此它会随着Apache一起启动。

mod-PHP模式下,PHP出错可能会影响到服务器进程也出错。

ISAPI

ISAPI全称是Internet Server Application Program Interface,它是微软提供的一套面向Internet服务的API接口。

一个ISPAI的DLL,可以在被用户请求激活后长驻内存,等待用户的后续请求。

ISAPI模式只能运行于Windows环境,当ISAPI的DLL应用程序和WWW服务器处于同一个进程中时,效率会明显高于CGI。

PHP 5.3.1版本开始不再支持ISAPI模式,因此看不到php5isapi.dll这个文件。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ylnzzl/article/details/120226720

智能推荐

AI数字人:AI数字人制作初探及相关开源简介_开源数字人-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏56次。数字人这名字听着稀奇又别扭,其实它最初的原型大家都听过——NPC。玩过游戏的应该都知道,也就是游戏内玩家操纵的游戏角色,可以和玩家进行交互的角色。广义上讲可以说是计算机模拟出的具有人的形态的虚拟人都叫做数字人,在平常的观感上,数字人是整合了人物形象模拟、人物声音克隆、自然语言处理、知识图谱解析等众多世界领先的人工智能技术的可视化数字虚拟人。他通过对人物形象的复制模拟,人物声音的克隆及语音合成,可随时随地与真人进行准确交互性对话。_开源数字人

WordPress网站速度优化教程指南_wordpress gzip-程序员宅基地

文章浏览阅读835次。我有一个网站,在使用 WP Super Cache 的时候发生了一个问题,就是在测试缓存的时候,一直无法通过,总提示时间戳对不上,导致只能应用 WP Cache 而不是 Super Cache(这个可以在内容选项卡看到)。通过将站点内容发布至遍布全国的海量加速节点,使其用户可就近获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。因为访客访问的是 CDN 的服务器,并不是直接访问网站源服务器,所以并不会消耗服务器的资源。_wordpress gzip

Ros点云格式转换总结_convertpointcloud2topointcloud-程序员宅基地

文章浏览阅读1.7k次。Ros点云格式转换总结三种格式:sensor_msgs::PointCloudsensor_msgs::PointCloud2pcl::PointCloud<T>其中,PointCloud2和pcl::PointCloud可以相互转换,PointCloud和PointCloud2可以相互转换,PointCloud和pcl::PointCloud的转换需要使用PointCloud2中转。PointCloud⟺PointCloud2⟺pcl::PointCloud<T>Po_convertpointcloud2topointcloud

标准C 库函数源代码_标准c库源代码-程序员宅基地

文章浏览阅读591次。The GNU C Library (glibc)_标准c库源代码

2022年意识科学十大主题焦点与研究进展-程序员宅基地

文章浏览阅读311次。2022年意识科学十大主题焦点意识究竟是什么?它因何产生?又有什么作用?以上三个问题分别涉及了意识的描述性问题、解释性问题和功能性问题。面对这三大天问,无论是神经学家、心理学家、认知哲学家、生物学家、物理学家、数学家、艺术家、社会学家、AI 科学家、精神病学家、药剂师、甚至是巫师、佛教徒、一个小孩……以至于所有人,似乎都能给出一套让人难以反驳的自洽解释。目前的现状就是,面对宇宙最神秘、复杂又似乎和..._philosophy of science association 2022

随便推点

实时移动物体检测项目实战代码-程序员宅基地

文章浏览阅读1.1k次,点赞10次,收藏23次。实时移动物体检测是一种计算机视觉技术,它主要用于视频流或连续图像序列中快速准确地确定是否存在以及在哪里存在正在移动的对象。这种技术广泛应用于安全监控、自动驾驶、无人机、机器人导航、智能交通系统以及移动设备上的各种应用程序。在实际应用中,实时移动物体检测通常涉及以下几个核心步骤:1. **图像采集**:从相机或其他成像设备捕获连续的视频帧。2. **背景建模**:创建或更新背景模型,以便区分前景(移动物体)和背景。常见的方法有混合高斯模型、光流法、卡尔曼滤波等。3. **差分检测**:通过比较

Nginx入门指南,快速搭建静态文件服务器和代理服务器_nginx 代理文件-程序员宅基地

文章浏览阅读6.1k次。本文介绍 Nginx 入门基础知识,让你迅速搭建 Nginx 服务器。主要内容包括 Nginx 安装和简单使用、Nginx的简单原理、Nginx 配置文件的结构、如何使用 Nginx 来提供静态文件服务、如何使用 Nginx 来搭建简单的代理服务器等知识。一、Nginx 的安装和简单使用 关于 Nginx 的安装、简单使用以及详细的命令行参数介绍请参考 http://blo_nginx 代理文件

Windows 进程的句柄表_obj_handle_attributes-程序员宅基地

文章浏览阅读2.3k次。本文源自《Windows内核原理与实现》第3章Windows 进程和线程3.4.1 Windows 进程的句柄表(1)上一章介绍了Windows 内核中的对象管理器,Windows 执行体实现了一套对象机制来管理各种资源或实体。每种对象都有一个类型对象,类型对象定义了该类对象的一些特性和方法。对象管理器也定义了一个全局名字空间,提供了根据名称来解析对象的统一机制(参考O_obj_handle_attributes

通过链表做学生成绩管理系统-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏15次。小项目需求:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1--B5 做一个学生成绩管理系统学生成绩有语文 数学 英语功能: 录入成绩 找三科总分的最高分 最低分 算出平均分需求分析:重点是通过这个小项目,进一步熟练链表和结构体,其个人遇到的主要难点是:班级链表A与学生链表B的连接解决难点思路:在定义的班级的结构体中,再定义一个指向学生的结构体...

POJ 1151 Atlantis(线段树+扫描线)_poj - 1151-程序员宅基地

文章浏览阅读1.2k次。Description 求n个矩形的面积并 Input 多组用例,每组用例第一行为一整数n表示矩形个数,之后n行每行四个浮点数x1,y1,x2,y2分别表示该矩形左下端点和右上端点的坐标,以n=0结束输入 Output 对于每组用例,输出这n个矩形的面积并 Sample Input 2 10 10 20 20 15 15 25 25.5 0 Sample Output Tes_poj - 1151

qcow2 镜像文件系统挂载_pvscan --cache-程序员宅基地

文章浏览阅读1.6k次。文章目录目的步骤目的新建一台Linux虚拟机之后,怕启动之后IP会跟局域网里面的IP冲突,需要先把镜像里面的network interfaces文件改掉,然后再启动虚拟机。步骤下面的步骤是针对虚拟机里面的文件系统是LVM的情况,这种很难搞,LVM(8e)不像(83)Linux可以直接挂载到宿主机的文件系统,按照下面的步骤应该对大部分的情景都管用sudo qemu-nbd --connect=/dev/nbd0 $qcow2_file_pathsudo fdisk -l /dev/n_pvscan --cache

推荐文章

热门文章

相关标签