PHP 的运行模式
Model方式
PHP Module
加载方式,就是把php
作为apache
的一个子模块运行.当通过web
访问php文件时,apache
就会调用php5_module
来解析php
代码。
php5_module
通过sapi
将数据传给php
解析器解析php
代码。
apache
每接收一个请求,都会产生一个进程来连接php
通过sapi
来完成请求,如果一旦用户过多,并发数过多,服务器就会承受不住了。
而且,把mod_php
编进apache
时,出问题时很难定位是php
的问题还是apache
的问题。
CGI
早期的web
服务器,只能处理用户请求的静态资源如html
,并将存储在服务器端的静态资源返回给浏览器,由于web
服务器不能处理动态脚本(php
),无法实现数据互通,为了解决此问题出现了CGI
(Common Gateway Interface)全称是”通用网关接口”,其实就是web
服务器(中间件)与动态语言进行”交流”的协议(约定)。
CGI
的好处就是完全独立于任何服务器,仅仅是做为中间分子。提供接口给apache
和php
。他们通过cgi
搭线来完成数据传递。这样做的好处了尽量减少2个的关联,使他们2变得更独立。
Web
服务器会传url
,查询字符串,post
数据,HTTP headers
给php
解析器,但是cgi
在高并发时效率会很低.因为web
服务器遇到动态请求时,服务器会fork
一个新的进程启动CGI
程序,解析动态脚本语言,将结果返回给web
服务器,web
服务器返回给客户端,处理完成后fork
的进程关闭,之后用户每次请求动态脚本语言都是这样一个复杂的过程,其效率可想而知。
Fastcgi
为了解决web
服务器每接收一个动态请求都fork
一个进程,结束kill
掉这个进程的问题,便出现了CGI
的改良版—Fast-CGI
(Fast Common GatewayInterface/FastCGI)快速通用网关接口。
Fast-CGI每次处理完请求后,不会kill掉这个进程,而是保留这个进程,从而使服务器可以同时处理更多的网页请求。这样就会大大的提高效率。
PHP-CGI
:是 PHP
(Web Application)对 Web Server
提供的 CGI
协议的接口程序。 同时是PHP
自带的Fast-CGI
管理器,性能差,很麻烦不人性化,PHP-FPM
的出现优化了PHP-CGI
。
PHP-FPM
:是PHP
(Web Application)对 Web Server
提供的 FastCGI
协议的接口程序,额外还提供了相对智能一些任务管理.PHP-FPM
是Fast-cgi
的进程管理器,是FastCGI
的一个具体实现,监听9000
端口。
包含了master
和worker
进程,其中master
进程负责与web
服务器中间件进行通信,接收用户请求,此请求服务器按照Fast-CGI
转换,交给worker
进程处理,执行php
代码。
php-cli
php-cli模式属于命令行模式,不需要借助其他程序,直接输入php xx.php 就能执行php代码。
命令行模式和常规web模式明显不一样的是:
- 没有超时时间
- 默认关闭buffer缓冲
- STDIN和STDOUT标准输入/输出/错误 的使用
- echo var_dump,phpinfo等输出直接输出到控制台
- 可使用的类/函数 不同
- php.ini配置的不同