Common Gateway Interface

CGI(一个琢磨)
是web服务器和表面应用程序(cgi程序)之间的接口标准,是cgi程序和web服务器之间传递音讯的规程。

cgi

在大体上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不佳明白。那么我们看一个事实上例子:现在的个人主页上大部分都有一个留言本。留言本的干活是如此的:先由用户在客户端输入一些音信,如名字之类的东西。接着用户按一下“留言”(到目前截至工作都在客户端),浏览器把这些消息传递到服务器的CGI目录下一定的cgi程序中,于是cgi程序在服务器上按照预定的艺术开展处理。在本例中就是把用户提交的音信存入指定的文本中。然后cgi程序给客户端发送一个音信,表示请求的任务已经完结。此时用户在浏览器里将看到“留言截止”的字样。整个过程截止。

处理步骤:

⑴通过Internet把用户请求送到web服务器

⑵web服务器收到用户请求并付诸CGI程序处理。

⑶CGI程序把处理结果传送给web服务器。

⑷web服务器把结果送回去用户。

cgi程序是由用户的输入触发的,运行在web服务器上的主次。CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的利用项目程序,就类似他们在实际上接纳那么些远距离统计机一样。

cgi

行事原理:

1.浏览器通过HTML表单超链接伸手指向一个CGI应用程序的URL。

2.服务器收发到请求。

3.服务器执行指定所CGI应用程序。

4.CGI应用程序执行所需要的操作,平常是遵照浏览者输入的情节。

5.CGI应用程序把结果格式化为网络服务器和浏览器可以知道的文档(平时是HTML网页)。

6.网络服务器把结果重回到浏览器中。

最低水平,PHP可以做其它其他CGI程序所能做的事,例如收集表格数据,生成动态页面情节,或者收发cookies.可能最有力,最有意义的风味是PHP辅助大范围的多寡库.书写一个协理数据库的Web
页面是难以置信的简便。


FastCGI(一个探讨)

CGI 的属性缺点:web server 拿到一个request
后,会fork一个子进程,然后子进程执行cgi程序。这意味
如果N个请求并发访问同一cgi
程序,那么该程序会被装载入内存N次。cgi进程的往往加载造成了cgi的特性低下。

FastCGI
就是一个常驻型(long-live)的cgi。它的紧要作为是将cgi解释器进程保存在内存中以取得较高的特性。

办事规律:

1、Web
Server启动时载入法斯特(Fast)(Fast)CGI过程管理器(IIS
ISAPI或Apache Module)

2、FastCGI进程管理器自身初叶化,启动两个CGI解释器进程(可见多少个php-cgi)并听候来自Web
Server的连天。

3、当客户端请求到达Web
Server时,Fast(Fast)CGI进程管理器采用并连接到一个CGI解释器。Web
server将CGI环境变量和正规输入发送到法斯特(Fast)(Fast)CGI子进程php-cgi。

4、法斯特(Fast)(Fast)CGI子进程完成处理后将正式输出和错误信息从同一连接再次回到Web
Server。当法斯特(Fast)CGI子进程关闭连接时,请求便告处理完成。Fast(Fast)CGI子进程接着等待并处理来自法斯特(Fast)(Fast)CGI经过管理器(运行在Web
Server中)的下一个总是。
在CGI格局中,php-cgi在此便退出了。

在上述意况中,你可以想像CGI通常有多慢。每一个Web请求PHP都必须再一次分析php.ini、重新载入全部扩大相提并论先河化全体数据结构。使用FastCGI,所有那一个都只在过程启动时发生一回。一个附加的好处是,持续数据库连接(Persistent
database connection)可以干活。


PHP-CGI(实现了FastCGI的程序)

PHP-CGI是PHP自带的FastCGI管理器。

PHP-CGI的不足:

php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。

平素杀死php-cgi进程,php就不可能运作了。(PHP-FPM和Spawn-FCGI就没有这么些题材,守护进程会平滑从新兴成新的子进程。)


PHP,PHP-FPM(实现了FastCGI的程序)

PHP-FPM是一个PHP 法斯特(Fast)(Fast)CGI管理器,是只用于PHP的。解决了php-cgi的一对题目。

PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理艺术,可以使得控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带
–enable-fpm参数即可开启PHP-FPM

CGI情势是各种请求fork一个子经过,然后再销毁.高频度的走访下,频繁的fork发生额外的系统开发,限制了处理能力,所以在apache下跑php一般都是内嵌模块的法门(mod_php)

话说CGI还有一种变种FASTCGI, 为了缓解CGI的这种缺陷,
大概是上世纪90年代中期出现了FASTCGI, 以常驻进程的格局提供CGI服务,

只是大抵与此同时,apache有了mod_perl,
mod_php等模块,性能一般相比较有优势,大家都喜爱用这种艺术,
所以fastcgi没立马火起来。

相关文章