十分钟理解CGIFastCGI和PHP

当WebServer收到index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Webserver再把结果返回给浏览器。这就是一个完整的动态PHPWeb访问流程,接下来再引出这些概念,就好理解多了,CGI:是WebServer与WebApplication之间数据交换的一种协议。FastCGI:同CGI,是一种通信协议,但比CGI在效率上做了一些优化。同样,SCGI协议与FastCGI类似。PHP-CGI:是PHP(WebApplication)对WebServer提供的CGI协议的接口程序。PHP-FPM:是PHP(WebApplication)对WebServer提供的FastCGI协议的接口程序,额外还提供了相对智能一些任务管理。CGI工作原理web服务器收到用户请求,就会把请求提交给cgi程序(如php-cgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句,返回给web服服务器,WEB服务器再返回给客户端,这就是普通cgi的工作原理CGI缺点:每一次web请求都会有启动和退出过程FAST-CGI工作原理WebServer启动时载入FastCGI进程管理器(ApacheModule或IISISAPI等)FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi),并等待来自WebServer的连接。当客户端请求到达WebServer时,FastCGI进程管理器选择并连接到一个CGI解释器。Webserver将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。FastCGI子进程完成处理后,将标准输出和错误信息从同一连接返回WebServer。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在WebServer中)的下一个连接。在CGI模式中,php-cgi在此便退出了。fast_cgi与cgi区别CGI,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重新初始化全部数据结构。FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistentdatabaseconnection)可以工作。FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或就是很大的内存数。了解php-fpm,需要先了解php-cgiPHP-CGI就是PHP实现的自带的FastCGI管理器。PHP-CGI只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理。所以就出现了一些能够调度php-cgi进程的程序,比如说由light


转载请注明:http://www.aierlanlan.com/tzrz/6550.html