php工作原理首先,了解下大家常说的cgi、php-cgi、fastcgi、php-fpm之间的关系,有助于理解php的工作原理。cgi协议cgi协议用于确定webserver(如nginx),即内容分发服务器传递什么数据,数据是什么格式?php-cgi进程解释器php-cgi是php的cgi协议进程解释器。每次启动时,都需要经过loadingphp.ini。ini文件->初始化执行环境->处理请求->返回内容给webserver->php-cgi进程退出进程fastcgi协议fastcgi协议是对cgi协议效率提升的补充,主要针对需要每次启动一个请求来了一个cgi解释器进程的优化不再需要cgi解释器进程在每次收到webserver请求时都重新加载php.ini文件和初始化执行环境。php-fpm进程管理器php-fpm是fastcgi协议的实现。它是一个进程管理器,在启动时包括主进程和工作进程。主进程负责管理工作进程。一般有多个worker进程,用来监听端口和接收来自webserver的请求。每个worker进程都有一个cgi进程来说明启动phpfpm时,会启动master进程,加载php.ini文件,初始化执行环境,同时启动多个worker进程。监听端口的工作进程会在每次请求到来时进行处理。php平滑重启的原理。修改php.ini后之后会被销毁,这样nginx的工作原理就可以顺利重启了。如果想了解nginx和php的配合原理,需要了解nginx配置文件server的server部分{listen80;#监听80端口,接收http请求server_namewww.example.com;#一般存放URL,表示配置哪个项目root/home/wwwroot/zensmall/public/;#存放代码的根目录地址或代码启动入口indexindex.phpindex.html;#WebsiteDefaultHomepage#Whenrequested当网站url进行location前缀匹配,最长匹配字符串为该配置项时,检查文件是否按顺序存在,返回第一个找到的文件location/{#try_files,检查文件是否存在按顺序存在,返回找到的第一个文件#$uri表示当前地址,不带请求参数#$query_string表示请求携带的参数#依次查看$uri文件,$uri地址是否存在,存在则返回第一个找到的文件;如果不存在,发起内部请求访问/index.php?$query_string,会重新匹配下面的location请求}#当请求网站的php文件时,反向代理去php-fpm要处理的位置~\.php${includefastcgi_params;#引入fastcgi配置文件fastcgi_pass127.0.0.1:9000;#设置phpfastcgi进程监听的IP地址和端口fastcgi_indexindex.php;#设置主页文件fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;#设置脚本文件请求的路径}}上面服务器配置的总体意思是:nginx每次在80端口监听url请求,都会匹配url的位置。如果匹配到/规则,则执行内部请求重定向,发起/index.php?$query_string的内部请求,相应的location配置规则将请求发送给php-fpm监听的worker进程在9000端口上。总结下面总结最简单的用户请求流程:用户访问域名->域名进行DNS解析->请求到对应的IP服务器和端口->nginx监听对应端口的请求->nginx匹配url的位置->执行匹配位置下的规则->nginx将请求转发给php->php-fpm的worker进程监听nginx请求->worker进程执行请求->worker进程返回执行结果给nginx->nginx返回结果给用户
