美学原理Common Gateway Interface


cgi

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

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

PHP-CGI的不足:

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

直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就从未有过这多少个问题,守护进程会平滑从新兴成新的子进程。)


CGI(一个合计)
是web服务器和外部应用程序(cgi程序)之间的接口标准,是cgi程序和web服务器之间传递音信的归程。

cgi

行事规律:

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

2.服务器收发到请求。

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

4.CGI应用程序执行所急需的操作,通常是基于浏览者输入的始末。

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

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

最低水平,PHP可以做其它其他CGI程序所能做的事,例如收集表格数据,生成动态页面情节,或者收发cookies.可能最有力,最有意义的性状是PHP帮忙大范围的数量库.书写一个援助数据库的Web
页面是难以置信的大概。

处理步骤:

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

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

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

⑷web服务器把结果送重返用户。

在情理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还糟糕明白。那么我们看一个事实上例子:现在的个人主页上大部分都有一个留言本。留言本的做事是这么的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下“留言”(到最近截止工作都在客户端),浏览器把那些消息传送到服务器的CGI目录下一定的cgi程序中,于是cgi程序在服务器上依据约定的不二法门举办拍卖。在本例中就是把用户提交的信息存入指定的文本中。然后cgi程序给客户端发送一个音信,表示请求的职责已经截止。此时用户在浏览器里将看到“留言截至”的字样。整个过程结束。

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

PHP-FPM是一个PHP FastCGI管理器,是只用于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没及时火起来。

法斯特(Fast)CGI(一个琢磨)

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

法斯特(Fast)CGI
就是一个常驻型(long-live)的cgi。它的显要表现是将cgi解释器进程保存在内存中以获取较高的属性。

干活原理:

1、Web
Server启动时载入FastCGI进程管理器(IIS
ISAPI或Apache Module)

2、Fast(Fast)CGI进程管理器自身起始化,启动三个CGI解释器进程(可见五个php-cgi)并听候来自Web
Server的接连。

3、当客户端请求到达Web
Server时,FastCGI进程管理器接纳并连续到一个CGI解释器。Web
server将CGI环境变量和业内输入发送到FastCGI子进程php-cgi。

4、法斯特(Fast)(Fast)CGI子进程完成处理后将规范输出和错误音信从同一连接重临Web
Server。当Fast(Fast)CGI子进程关闭连接时,请求便告处理完了。Fast(Fast)CGI子进程接着等待并处理来自法斯特(Fast)(Fast)CGI进程管理器(运行在Web
Server中)的下一个接连。
在CGI形式中,php-cgi在此便退出了。

在上述情形中,你能够想象CGI平日有多慢。每一个Web请求PHP都必须重新分析php.ini、重新载入全部恢宏一视同仁伊始化全体数据结构。使用Fast(Fast)CGI,所有这个都只在过程启动时暴发两次。一个非凡的补益是,持续数据库连接(Persistent
database connection)可以干活。


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