要了解CGI之前,先要清楚什么时候会用到CGI
Web Service(nginx,apache)是内容的分发者,对客户端的请求就行应答。
如果只是请求静态页面index.html,那么Web Service(nginx,apache)就会去找到index.html的位置,直接返回给客户端,在这里的Web Service(nginx,apache)分发的就是静态数据;
如果请求的是动态页面index.php,那么Web Service(nginx,apache)是不能直接返回的,他会通过配置文件知道这个是动态页面,接着调用php解析器(php-fpm)进行处理;
那么Web Service(nginx,apache)和php解析器(php-fpm)之间是如何交互的呢?答案就是:CGI
什么是CGI
CGI(“通用网关接口”),是一种让Web Application(java,php等)和Web服务器程序之间进行通信(数据传输)的协议,用来规范web服务器传输到php解释器中的数据类型以及数据格式,包括URL、查询字符串、POST数据、HTTP header等,也就是为了保证web server传递过来的数据是标准格式的。
CGI程序的工作原理
1)当web server收到index.php这种类型的动态请求后,会启动对应的CGI程序(PHP的解析器);
2)PHP解析器会解析php.ini配置文件,初始化运行环境,然后处理请求,处理完成后将数据按照CGI规定的格式返回给web server然后退出进程;
3)最后web server再把结果返回给浏览器
CGI程序特点
1)高并发性能差(每一次请求都会有启动和退出的过程,每次HTTP服务器遇到动态请求时都需要重新启动脚本解析器来解析php.ini,重新载入全部DLL扩展并重初始化全部数据结构,然后把结果返回给HTTP服务器)
2)安全性差
3)CGI对php.ini敏感,调试起来很方便
什么是PHP-CGI
是 PHP 对 Web Server 提供的 CGI 协议的接口程序
PHP-CGI的特点
1)变更php.ini配置文件后需要重启PHP-CGI才能使配置生效,不能平滑重启
2)直接杀死进程php就不能运行了