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配置的不同

微信收款码
支付宝收款码