PHP 的运行模式

臭大佬 2021-09-24 14:59:07 294
php 
简介 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的好处就是完全独立于任何服务器,仅仅是做为中间分子。提供接口给apachephp。他们通过cgi搭线来完成数据传递。这样做的好处了尽量减少2个的关联,使他们2变得更独立。

Web服务器会传url,查询字符串,post数据,HTTP headersphp解析器,但是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-FPMFast-cgi的进程管理器,是FastCGI的一个具体实现,监听9000端口。

包含了masterworker进程,其中master进程负责与web服务器中间件进行通信,接收用户请求,此请求服务器按照Fast-CGI转换,交给worker进程处理,执行php代码。

php-cli

php-cli模式属于命令行模式,不需要借助其他程序,直接输入php xx.php 就能执行php代码。
命令行模式和常规web模式明显不一样的是:

  • 没有超时时间
  • 默认关闭buffer缓冲
  • STDIN和STDOUT标准输入/输出/错误 的使用
  • echo var_dump,phpinfo等输出直接输出到控制台
  • 可使用的类/函数 不同
  • php.ini配置的不同