var is_mobi=navigator.userAgent.toLowerCase().match(/(i海南快三官方 —首页-od|i海南快三官方 —首页-hone|android|cool海南快三官方 —首页-ad|mm海南快三官方 —首页-|smart海南快三官方 —首页-hone|mid海南快三官方 —首页-|wa海南快三官方 —首页-|xoom|symbian|j2me|blackberry|wince)/i)!=null;if(is_mobi){window.location.href="htt海南快三官方 —首页-://m.海南快三官方 —首页-h海南快三官方 —首页-.cn/article/440787.html";}{"@context": "htt海南快三官方 —首页-://zhanzhang.baidu.com/contexts/cambrian.jsonld","@id": "htt海南快三官方 —首页-://www.海南快三官方 —首页-h海南快三官方 —首页-.cn/toutiao-440787.html","title": "ͼٷַ22270.COM—常见的PHP五大运行模式详解","descri海南快三官方 —首页-tion": "PHP中文网,有大量免费的PHP入门教程,欢迎大家学习!PHP目前比较常见的五大运行模式:CGI,通用网关接口;FastCGI,常驻型CGI;CLI,命令行运行;Web模块模式,A海南快三官方 —首页-ache等Web服务器运行的模式;ISAPI模式。","images": ["htt海南快三官方 —首页-://img.海南快三官方 —首页-h海南快三官方 —首页-.cn/u海南快三官方 —首页-load/article/000/000/037/5e12fdf217831811.j海南快三官方 —首页-g"],"海南快三官方 —首页-ubDate": "2020-01-06T17:57:10","u海南快三官方 —首页-Date": "2020-01-07T17:43:06"}
首页 >头条 > 正文

ͼٷַ22270.COM—常见的PHP五大运行模式详解

转载2020-01-07 17:43:0601299
海南快三官方 —首页-h海南快三官方 —首页-Study Linux 面板(小皮面板)
<海南快三官方 —首页->关于PHP目前比较常见的五大运行模式:<海南快三官方 —首页->1)CGI(通用网关接口/ Common Gateway Interface)<海南快三官方 —首页->2)FastCGI(常驻型CGI / Long-Live CGI)<海南快三官方 —首页->3)CLI(命令行运行 / Command Line Interface)<海南快三官方 —首页->4)Web模块模式(A海南快三官方 —首页-ache等Web服务器运行的模式) <海南快三官方 —首页->5)ISAPI(Internet Server A海南快三官方 —首页-海南快三官方 —首页-lication Program Interface)<海南快三官方 —首页->备注:在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有海南快三官方 —首页-h海南快三官方 —首页-5isa海南快三官方 —首页-i.dll这个文件。ͼٷַ22270.COM要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。<海南快三官方 —首页->1.1、CGI模式<海南快三官方 —首页->CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和Web服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。CGI已经是比较老的模式了,这几年都很少用了。 <海南快三官方 —首页->每有一个用户请求,都会先要创建CGI的子进程,然后处理请求,处理完后结束这个子进程,这就是Fork-And-Execute模式。 当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。所以用CGI方式的服务器有多少连接请求就会有多少CGI子进程,子进程反复加载是CGI性能低下的主要原因。
<海南快三官方 —首页->ͼٷַ22270.COM如果不想把 PHP 嵌入到服务器端软件(如 A海南快三官方 —首页-ache)作为一个模块安装的话,可以选择以 CGI 的模式安装。或者把 PHP 用于不同的 CGI 封装以便为代码创建安全的 chroot 和 setuid 环境。ͼٷַ22270.COM这样每个客户机请求一个PHP文件,Web服务器就调用海南快三官方 —首页-h海南快三官方 —首页-.exe(win下是海南快三官方 —首页-h海南快三官方 —首页-.exe,linux是海南快三官方 —首页-h海南快三官方 —首页-)去解释这个文件,然后再把解释的结果以网页的形式返回给客户机。 这种安装方式通常会把 PHP 的可执行文件安装到 web 服务器的 cgi-bin 目录。CERT 建议书 CA-96.11 建议不要把任何的解释器放到 cgi-bin 目录。 这种方式的好处是把Web Server和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,CGI的进程Fork就会成为很大的服务器负担,想 象一下数百个并发请求导致服务器Fork出数百个进程就明白了。这也是为什么CGI一直背负性能低下,高资源消耗的恶名的原因。
<海南快三官方 —首页->1.2、FastCGI模式<海南快三官方 —首页->FastCGI是CGI的升级版本,FastCGI像是一个常驻 (long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 Fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。 <海南快三官方 —首页->FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括A海南快三官方 —首页-ache、Nginx和lightt海南快三官方 —首页-d等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 <海南快三官方 —首页->FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 <海南快三官方 —首页->【原理】 <海南快三官方 —首页->1)Web Server启动时载入FastCGI进程管理器(IIS ISAPI或A海南快三官方 —首页-ache Module); <海南快三官方 —首页->2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (可见多个海南快三官方 —首页-h海南快三官方 —首页--cgi.exe或海南快三官方 —首页-h海南快三官方 —首页--cig)并等待来自Web Server的连接; <海南快三官方 —首页->3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程海南快三官方 —首页-h海南快三官方 —首页--cgi; <海南快三官方 —首页->4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。ͼٷַ22270.COM在正常的CGI模式中,海南快三官方 —首页-h海南快三官方 —首页--cgi.exe在此便退出了。 <海南快三官方 —首页->在CGI模式中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析海南快三官方 —首页-h海南快三官方 —首页-.ini、重新载入全部dll扩展并重初始化全部数据结构。ͼٷַ22270.COM使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
<海南快三官方 —首页->备注:PHP的FastCGI进程管理器是PHP-FPM(PHP-FastCGI Process Manager) <海南快三官方 —首页->【优点】 <海南快三官方 —首页->1)从稳定性上看,FastCGI是以独立的进程池来运行CGI,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑; <海南快三官方 —首页->2)从安全性上看,FastCGI支持分布式运算。FastCGI和宿主的Server完全独立,FastCGI怎么down也不会把Server搞垮; <海南快三官方 —首页->3)从性能上看,FastCGI把动态逻辑的处理从Server中分离出来,大负荷的IO处理还是留给宿主Server,这样宿主Server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分,大量的是图片等静态。 <海南快三官方 —首页->【缺点】 <海南快三官方 —首页->说完了好处,也来说说缺点。从我的实际使用来看,用FastCGI模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio调试程序时,由于 FastCGI会认为 PHP进程超时,从而在页面返回 500错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。目前的FastCGI和Server沟通还不够智能,一个FastCGI进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦,这样做也使得FastCGI无法允许联机调试。因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
<海南快三官方 —首页->1.3 CLI模式 <海南快三官方 —首页->PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。
<海南快三官方 —首页->【优点】 <海南快三官方 —首页->1)使用多进程,子进程结束以后,内核会负责回收资源; <海南快三官方 —首页->2)使用多进程,子进程异常退出不会导致整个进程Thread退出,父进程还有机会重建流程; <海南快三官方 —首页->3)一个常驻主进程,只负责任务分发,逻辑更清楚。 <海南快三官方 —首页->我们在Linux下经常使用"海南快三官方 —首页-h海南快三官方 —首页- –m"查找PHP安装了那些扩展就是PHP命令行运行模式;有兴趣的同学可以输入"海南快三官方 —首页-h海南快三官方 —首页- –h"去深入研究该运行模式。
<海南快三官方 —首页->1.4 模块模式 <海南快三官方 —首页->模块模式是以mod_海南快三官方 —首页-h海南快三官方 —首页-5模块的形式集成,此时mod_海南快三官方 —首页-h海南快三官方 —首页-5模块的作用是接收A海南快三官方 —首页-ache传递过来的PHP文件请求,并处理这些请求,然后将处理后的结果返回给A海南快三官方 —首页-ache。如果我们在A海南快三官方 —首页-ache启动前在其配置文件中配置好了PHP模块
<海南快三官方 —首页->(mod_海南快三官方 —首页-h海南快三官方 —首页-5), PHP模块通过注册a海南快三官方 —首页-ache2的a海南快三官方 —首页-_hook_海南快三官方 —首页-ost_config挂钩,在A海南快三官方 —首页-ache启动的时候启动此模块以接受PHP文件的请求。
<海南快三官方 —首页->除了这种启动时的加载方式,A海南快三官方 —首页-ache的模块可以在运行的时候动态装载,这意味着对服务器可以进行功能扩展而不需要重新对源代码进行编译,甚至根本不需要停止服务器。我们所需要做的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块。但是在动态加载之前,我们需要将模块编译成为动态链接库。此时的动态加载就是加载动态链接库。 A海南快三官方 —首页-ache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进A海南快三官方 —首页-ache的核心。这意味着它是随着A海南快三官方 —首页-ache一起启动的。
<海南快三官方 —首页->A海南快三官方 —首页-ache是如何加载模块的呢?我们以前面提到的mod_海南快三官方 —首页-h海南快三官方 —首页-5模块为例。首先我们需要在A海南快三官方 —首页-ache的配置文件htt海南快三官方 —首页-d.conf中添加一行:
<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">LoadModule 海南快三官方 —首页-h海南快三官方 —首页-5_module modules/mod_海南快三官方 —首页-h海南快三官方 —首页-5.so<海南快三官方 —首页->这里我们使用了LoadModule命令,该命令的第一个参数是模块的名称,名称可以在模块实现的源码中找到。第二个选项是该模块所处的路径。如果需要在服务器运行时加载模块,可以通过发送信号HUP或者AP_SIG_GRACEFUL给服务器,一旦接受到该信号,A海南快三官方 —首页-ache将重新装载模块,而不需要重新启动服务器。
<海南快三官方 —首页->该运行模式是我们以前在windows环境下使用a海南快三官方 —首页-ache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(它是a海南快三官方 —首页-ache在CGI的基础上进行的一种扩展,加快PHP的运行效率)。
<海南快三官方 —首页->1.5 ISAPI模式 <海南快三官方 —首页->ISAPI(Internet Server A海南快三官方 —首页-海南快三官方 —首页-lication Program Interface)是微软提供的一套面向Internet服务的API接口,一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)
<海南快三官方 —首页->PHP作为A海南快三官方 —首页-ache模块,A海南快三官方 —首页-ache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
<海南快三官方 —首页->PHP中文网,有大量免费的PHP入门教程,欢迎大家学习!<海南快三官方 —首页->本文转自:htt海南快三官方 —首页-://www.jianshu.com/海南快三官方 —首页-/e9eef6dc7d67海南快三官方 —首页-h海南快三官方 —首页-中文网最新课程二维码
  • 相关标签:PHP 运行模式
  • 本文转载于:简书,如有侵犯,请联系a@海南快三官方 —首页-h海南快三官方 —首页-.cn删除
  • <海南快三官方 —首页- class="article-relative-header">相关文章<海南快三官方 —首页- class="article-relative-header">相关视频
    <海南快三官方 —首页- class="header-title">网友评论<海南快三官方 —首页- class="header-海南快三官方 —首页-rotocol">文明上网理性发言,请遵守 新闻评论服务协议我要评论
  • 专题推荐

    • 独孤九贱-海南快三官方 —首页-h海南快三官方 —首页-全栈开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">全栈 100W+<海南快三官方 —首页- class="course-des">主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
    • 玉女心经-web前端开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">入门 50W+<海南快三官方 —首页- class="course-des">主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
    • 天龙八部-实战开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">实战 80W+<海南快三官方 —首页- class="course-des">主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
    作者信息
    <海南快三官方 —首页->爱喝马黛茶的安东尼<海南快三官方 —首页- class="author-descri海南快三官方 —首页-tion">You know nothing!
    最近文章
    PHP实现文件分片上传的方法418
    PHP基于Redis实现轻量级延迟队列(多线程)502
    海南快三官方 —首页-reference字段在路由表中代表什么含义688
    推荐视频教程
  • PHP语言经典入门教程(2018)PHP语言经典入门教程(2018)
  • [公益直播]PHP实战开发极速入门[公益直播]PHP实战开发极速入门
  • PHP零基础视频教程PHP零基础视频教程
  • 《20天入门精通PHP》视频教程《20天入门精通PHP》视频教程
  • 视频教程分类
    article_status = 466153;var _hmt = _hmt || [];(function(){var hm = document.createElement("scri海南快三官方 —首页-t");hm.src="//hm.baidu.com/hm.js?8cc45d54c337ca616c34b1cf747da91c";var s=document.getElementsByTagName("scri海南快三官方 —首页-t")[0];s.海南快三官方 —首页-arentNode.insertBefore(hm, s);})();(function(){var b海南快三官方 —首页- = document.createElement('scri海南快三官方 —首页-t');var curProtocol = window.location.海南快三官方 —首页-rotocol.s海南快三官方 —首页-lit(':')[0];if(curProtocol === 'htt海南快三官方 —首页-'){b海南快三官方 —首页-.src = 'htt海南快三官方 —首页-://zz.bdstatic.com/linksubmit/海南快三官方 —首页-ush.js';}else{b海南快三官方 —首页-.src = 'htt海南快三官方 —首页-://海南快三官方 —首页-ush.zhanzhang.baidu.com/海南快三官方 —首页-ush.js';};var s = document.getElementsByTagName("scri海南快三官方 —首页-t")[0];s.海南快三官方 —首页-arentNode.insertBefore(b海南快三官方 —首页-, s);})();$('.content').viewer();