php web运行流程

1.php简单介绍
php,超文本预处理语言,超文本可以联想到html,可以解释php也是一门web端语言,当然php当今主要用法也是用在web上。 预处理顾名思义,提前处理的意思,我的理解是我们执行html文件时只要通过浏览器打开,浏览器会实时渲染代码。当执行php文件时,我们需要先通过web服务器转发给php解释器处理返回html代码,php解释器会执行嵌入在php文件中的php代码,这样返回给浏览器渲染的代码其实已经提前处理过了。

2.php web请求运行流程
说起php web不得不提起web服务器,与php结合比较紧密的服务器主要有两种,nginxapache,区别可自行百度。
在介绍流程之前需要先介绍几个概念:

  • sapi
    php对外通信接口。
    由于php不能直接处理http请求,所以它定义了一组接口与web服务器进行通信,这组接口有几种,比较常见的是cgi/fastcgiapache2 handlercli,打开phpinfo可以看见配置的是哪种

    cgi/fastcgi

    apache2 handler

  • cgi
    cgi叫网关通信协议,他是一种协议,介于web服务器与cgi程序之间,它规定了web服务器该把数据以怎样的数据结构传给cgi程序,然后cgi程序处理完代码之后该以怎样的数据结构把数据回传给web服务器。

  • php-cgi
    phpcgi程序,可以通过php的实现了cgi协议的cgi/fastcgi接口接受数据处理,不过cgi 有个很坑的地方,每次web请求都会启动一次cgi程序然后再退出,这样对大规模并发并不友好。

  • fastcgi
    为了优化以上问题,所以引出了fastcgifastcgi可以看成cgi协议的升级版,它事先早早启动多个cgi程序,等待web请求,处理完了之后也不会退出,等待下一个请求。

  • php-fpm
    实现了fastcgiphp进程管理器,php-fpm启动时有三种模式,即静态,动态,按需。我们一般用的是动态,在php-fpm启动时预先启动一个主进程和20个子进程(可配置),请求空闲或请求繁忙是会自动killfork一个子进程,但不能高于配置好的最大子进程数与最小子进程数。主进程负责分发(其实子进程会竞争)web请求给子进程,同时解析配置文件,初始化执行环境,对子进程进行管理,而子进程只负责处理,至于什么时候退出处理状态,什么时候kill,均交给主进程。php-fpm通常与nginx一起配合使用。

  • apache处理php web程序
    apache一般是将php作为自己单独的模块去进行处理,php5.xphp5_module模块,php7.xphp7_moduleapache通过这些模块与php 通信,这种模式每次请求apache都会产生一条进程,关键apache还是同步阻塞的,请求需要等着处理返回结果,这样一旦达到进程的最大数,那下面的请求就需要排队,这就造成了大规模并发的问题。

    apache处理

  • nginx处理php web程序
    nginx一般和php-fpm配合起来用,准确来说是配合实现fastcgi的程序来使用,拿 php-fpm来说,它本身实现了动态管理进程,已经节省了资源,而nginx又是异步非阻塞的,请求无需等待返回子进程就可以接受处理新的请求,再加上可以通过fastcgi_pass转发请求给其他的web服务器减少压力,从而能承受较大并发。

    nginx处理

你可能感兴趣的:(php web运行流程)