CGI的由来
早期的web服务器,只能响应浏览器发来的HTTP静态资源的请求。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。
什么是CGI
CGI只是一个接口规范或协议,它的实现则与具体的编程语言相关。
CGI的工作原理
Web服务器一般只用来处理静态文件请求,当碰到动态脚本请求时,Web服务器主进程就会创建一个新的进程来启动CGI程序,也就是将动态脚本交给CGI程序来处理。启动CGI程序需要一个过程,如读取配置文件,加载扩展,初始化环境等。CGI解析完动态脚本后将结果返回给服务器,最后Web服务器将结果返回给客户端,之前创建的进程也随之关闭。
这样每次用户请求动态脚本,Web服务器都要重新去创建一个新进程去启动CGI程序,读取配置文件,初始化环境等重复性操作,CGI程序处理完动态脚本后又会随之关闭,这样周而复始,其效率是非常低下的。于是便出现了FastCGI。
PHP-CGI
PHP-CGI就是CGI协议的php版本实现。除了协议本身的问题还有一些其他问题
比如
-
PHP-CGI变成php.ini配置后,需要重启php-cgi才能让新的配置生效,不可以平滑重启。
-
直接杀死PHP-CGI进程,php就不能运行了。
而后来的PHP-FPM则完美解决了这两个问题并且其