php的几种运行模式CLI、CGI、FastCGI、mod_php

1、CLI:就是命令行,例如可以在控制台或者是shell中键入命令:

php -f index.php

然后获取输出

 

2、CGI:以下是不同的说法与理解

    公共网关接口”(Common Gateway Interface),HTTP服务器 与你的或其它机器上的程序 进行 “交谈”的一种工具 ,其程序 须运行在网络 服务器 上。在服务器 环境中,为“程序 ”提供标准 的接口,通过这个接口,“程序 ”可以对服务器 与客户端 交换的信息 做一些事情 。“程序 ”的语 言并没有要求。程序 对接口进行 操作。服务器 要支持 CGI就要提供CGI中要求的环境变量 ,或者还有别的。

    HTTP Server和一个独立的进程之间的协议,把HTTP Request的Header设置成进程的环境变量,HTTP Request的正文设置成进程的标准输入,而进程的标准输出就是HTTP Response包括Header和正文。

    这个 Web 服务器使用了 UNIX shell 环境变量 来保存从 Web 服务器传递出去的参数,然后生成一个运行 CGI 的独立进程

    不同类型语言写的程序只要符合cgi标准,就能作为一个cgi程序与web服务器交互

    以CGI方式运行时,web server将用户请求以消息的方式转交给PHP独立进程,PHP与web服务之间无从属关系。

 

    个人理解:CGI规定了php与web server交流的规则,相当于执行了response = exec("php -f index.php -url=xxx -cookie=xxx -xxx=xxx")。

 

    关于CGI与CLI区别可以查看官方文档说的挺不错的:http://php.net/manual/zh/features.commandline.php

    文中阐述了CGI与CLI的显著区别:

        以下为 CLI SAPI 和其它 CLI SAPI 模块相比的显著区别:

  • 与 CGI SAPI 不同,其输出没有任何头信息。

    尽管 CGI SAPI 提供了取消 HTTP 头信息的方法,但在 CLI SAPI 中并不存在类似的方法以开启 HTTP 头信息的输出。

    CLI 默认以安静模式开始,但为了保证兼容性,-q 和 --no-header 参数为了向后兼容仍然保留,使得可以使用旧的 CGI 脚本。

    在运行时,不会把工作目录改为脚本的当前目录(可以使用 -C 和 --no-chdir 参数来兼容 CGI 模式)。

    出错时输出纯文本的错误信息(非 HTML 格式)。

 

3、FastCGI:CGI有很多缺点,每接收一个请求就要fork一个进程处理,只能接收一个请求作出一个响应。请求结束后该进程就会结束。而FastCGI会事先启动起来,作为一个cgi的管理服务器存在,预先启动一系列的子进程来等待处理,然后等待web服务器发过来的请求,一旦接受到请求就交由子进程处理,这样由于不需要在接受到请求后启动cgi,会快很多。FastCGI使用进程/线程池来处理一连串的请求。这些进程/线程由FastCGI服务器管理,而不是Web服务器。 当进来一个请求时,Web服务器把环境变量和这个页面请求通过一个Socket长连接传递给FastCGI进程。FastCGI像是一个常驻型的CGI,它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI对位人诟病的fork-and-execute模式)。正是因为它只是一个通信协议,它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其他网站服务器的请求

    FastCGI整个流程:

    1. Web server启动时载入FastCGI进程管理器

    2. FastCGI自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web server的请求

    3. 当请求Web server时,Web server通过socket请求FastCGI进程管理器,FastCGI进程管理器选择并连接到一个CGI解释器,Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi

    4. FastCGI子进程处理请求完成后将标准输出和错误从同一连接返回给Web server,当FastCGI子进程结束后请求便结束。FastCGI子进程接着等待处理来自FastCGI进程管理器的下一个连接,在CGI模式中,php-cgi在此便退出了。

 

    php-fpm:PHP的FastCGI进程管理器

 

4、mod_php:即apache的php模块,将PHP做为web-server的子进程控制,两者之间有从属关系.最明显的例子就是在CGI模式下,如果修改了PHP.INI的配置文件,不用重启web服务便可生效,而模块模式下则需要重启web服务。以mod_php模式运行PHP,意味着php是作为apache的一个模块来启动的,因此只有在apache启动的时候会读取php.ini配置文件并加载扩展模块,在apache运行期间是不会再去读取和加载扩展模块的

Apache的工作模式 prefork的工作原理

一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或是空闲的子进程用于迎接即将到来的请求。这样客户端就无需在得到服务前等候子进程的产生。在Unix系统中,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于配置子进程的低特权用户。运行子进程的用户必须要对他所服务的内容有读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。

worker的工作原理

每个进程能够拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。Apache总是试图维持一个备用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。User和Group指令用于配置Apache子进程的权限。虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予他较少的特权。另外,除非使用了suexec ,否则,这些指令配置的权限将被CGI脚本所继承

 

    个人理解:这种模式把php嵌入到apache中,相当于给apache加入了解析php文件的功能。

 

转载于:https://www.cnblogs.com/orlion/p/5282753.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之三大图片缓存原理、特性对比

一. 四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用。Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知。Glide 是 Google 员工的开源项目,被一些 Google App 使用…

android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册

《基于android操作系统的手机宿舍管理系统使用手册》由会员分享,可在线阅读,更多相关《基于android操作系统的手机宿舍管理系统使用手册(5页珍藏版)》请在人人文库网上搜索。1、基于an droid操作系统的手机宿舍管理系统使用手册 1 系统概述 本系统是在an…

产品需求文档 PRD

第一轮: 1,文档使用方:UI设计师 2、内容: 根据战略层定义出来产品功能范围, 说明此产品的目的,方便UI设计人员更好的理解产品 产品基本流程 详细的设计框架图,推荐用ax…

他读博期间连发3篇Science,28岁任武大教授后再发Nature!

全世界只有3.14 % 的人关注了爆炸吧知识来源:募格课堂整合自武汉大学、武汉晚报、半月谈等有这样一位学者,读博期间以一作身份发表3篇Science,28岁成为武汉大学化学与分子科学学院教授再发2篇Nature,35岁荣获杰青......今年9月,他…

如何限制并发的 异步IO 请求数量?

咨询区 Grief Coder:我的项目中有下面一段代码:// lets say there is a list of 1000 URLs string[] urls { "http://google.com", "http://yahoo.com", ... };// now lets send HTTP requests to each of these URLs in parallel …

Android之自定义 ActionBar 上的菜单(Menu)文字颜色

本文记录了修改 ActionBar 上 Menu 字体颜色的方法。第一种通过自定义主题实现,第二种通过复写onCreateOptionsMenu实现。 自定义Theme 修改MenuItem 文字颜色 自定义 ActionBar 上的菜单文字颜色需要通过 Activity 的 Theme 实现,而非 ActionBar 的 The…

删除远程桌面登陆痕迹

怎么删除本地远程桌面地址记录(连接地址输入框的下拉菜单)。 首先运行regedit,打开注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default 右边的那些键值就记录了IP或者域名&…

Java Web开发Tomcat中三种部署项目的方法

第一种方法&#xff1a;在tomcat中的conf目录中&#xff0c;在server.xml中的&#xff0c;<host/>节点中添加&#xff1a; <Context path"/hello" docBase"D:\eclipse3.2.2forwebtools\workspace\hello\WebRoot" debug"0" privileged&q…

Android 页面布局xd,Adobe XD强大的布局系列工具 助你事半功倍

数字设计有多种形式-从移动端、桌面网站到显示屏应用程序、智能助手、车载娱乐系统(例如CarPlay和Android Auto)等等。为当今的应用程序打造数字体验意味着需要针对各种屏幕尺寸、布局和交互类型进行设计。作为设计师&#xff0c;您的时间应该花在用户体验上&#xff0c;而不是…

JS中数组Array的用法{转载}

js数组元素的添加和删除一直比较迷惑&#xff0c;今天终于找到详细说明的资料了&#xff0c;先给个我测试的代码^-^var arr new Array();arr[0] "aaa";arr[1] "bbb";arr[2] "ccc";//alert(arr.length);//3arr.pop();//alert(arr.length);//2…

如果觉得午休时间太短怎么办?

1 假装自己戴了口罩&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 正义不会迟到博主是男的&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 阅读理解有多难&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 下雨天就不要爬树了&…

Android之ActionBar常用设计和使用总结

常用ActionBar总结 我们经常看见项目的顶部有一些文字显示在中间,或者左边、右边,而且还有一个返回的图标,很方便我们返回,接下来我总结下常用的ActionBar 第一步:写常见的ActionBar的布局文件 我这里写了3个actionbar文件 1、actionbar_return.xml …

WPF 实现温度计

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织在WPF中没有现成的温度计控件&#xff0c;所以我们自己实现一个。微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&am…

100-6

2019独角兽企业重金招聘Python工程师标准>>> /**\第6题&#xff08;数组&#xff09;腾讯面试题&#xff1a; 给你10分钟时间&#xff0c;根据上排给出十个数&#xff0c;在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个…

linux系统644、755、777权限详解

在linux系统中644、755、777三种权限是非常重要的一些权限了&#xff0c;下面我来详细的介绍644、755、777三种权限的使用&#xff0c;希望对各位有帮助。常用的linux文件权限&#xff1a; 444 r--r--r-- 600 rw------- 644 rw-r--r-- 666 rw-rw-rw- 700 rwx------ 744 rwxr--r…

android获取自适应高度,Android中oncreate中获得控件高度或宽度的实现方法

Android中oncreate中获得控件高度或宽度的实现方法onCreate函数只是提供了数据初始化的机会&#xff0c;此时还没有正式绘制图形。在图形尚未渲染的情况下&#xff0c;getWidth()或getHeight()得到的值为0。如果需要自适应屏幕&#xff0c;需要一进入界面就得到父控件大小&…

单例模式7种实现

单例模式 1 、介绍&#xff1a; 单例模式(Singleton)也叫单态模式&#xff0c;是设计模式中最为简单的一种模式&#xff0c;甚至有些模式大师都不称其为模式&#xff0c;称其为一种实现技巧&#xff0c;因为设计模式讲究对象之间的关系的抽象&#xff0c;而单例模式只有自己一…

博导眼里本科生的科研能力:“他们还在玩泥巴”

父母眼中的科学博士&#xff1a;造飞机&#xff0c;造航母&#xff0c;造火箭本科生眼中的科学博士&#xff1a;特严谨&#xff0c;特专业&#xff0c;特……特别老硕士研究生眼中的博士&#xff1a;真能熬&#xff0c;真能写&#xff0c;真坚定博导眼中的博士&#xff1a;还年…

最全前端开发面试问题及答案整理

来自Github秋风的原文 说说你对闭包的理解 Talk about your understanding of closures 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染&#xff0c;缺点是闭包会常驻内存&#xff0c;会增大内存使用量&#xff0c;使用不当很容易造成内存泄露。…

C# 10 新特性 —— 补充篇

C# 10 新特性 —— 补充篇Intro前面已经写了几篇文章介绍 C# 10 新特性的文章&#xff0c;还有一些小的更新Constant interpolated strings在之前的版本中&#xff0c;如果想要使用插值字符串来&#xff0c;则不能声明为一个常量如果依赖于一个常量的插值字符串就只能声明为一个…