| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> PHP 五种运行模式 -> 正文阅读 |
|
[PHP知识库]PHP 五种运行模式 |
目录 简介CGICGI的全称是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才能生效。 FastCGIFastCGI是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】各自独立存在,所以可能需要单独调试和监控。 CLIPHP-CLI全称是PHP Command Line Interface,即PHP在命令行运行的接口。 优点: 1.使用多进程,子进程结束后,内核会负责回收资源。 2.子进程异常退出不会导致整个进程退出,父进程还能重建流程。 3.一个常驻主进程,只负责任务分发,逻辑更清楚。 用PHP命令行查看PHP已安装的拓展: ????????php -m 用PHP命令行查看PHP命令的帮助信息: ????????php -h mod_PHPmod_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出错可能会影响到服务器进程也出错。 ISAPIISAPI全称是Internet Server Application Program Interface,它是微软提供的一套面向Internet服务的API接口。 一个ISPAI的DLL,可以在被用户请求激活后长驻内存,等待用户的后续请求。 ISAPI模式只能运行于Windows环境,当ISAPI的DLL应用程序和WWW服务器处于同一个进程中时,效率会明显高于CGI。 PHP 5.3.1版本开始不再支持ISAPI模式,因此看不到php5isapi.dll这个文件。 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/19 15:38:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |