谷姐:我们都是谷歌迷
We are all Google fans

正在写一个手册,顺便发一下php执行的基础原理-kaleok

Rate this post

php运行模式
PHP在服务器工作中分命令行模式和网页解析器模式两种
1、PHP命令行模式
PHP命令行模式又叫CLI模式,PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。
在linux系统中,PHP的CLI可执行文件入口一般存放在PHP安装目录/bin下的php无后缀.file二进制文件,PHP属于解析性脚本语言。所以PHP可以指定解释脚本独立运行,比如/usr/local/php/bin/php/home/1.php
同时如果系统环境变量中已经配置好PHP的执行路径,可以直接:php /home/1.php你需要运行的PHP脚本。
在windows系统中,PHP同样存在php.exe CLI执行文件。你可以双击执行,但双击执行没有加载需要执行的脚本代码,所以可以理解为可视化编程控制台。但同样可以 /路径/php.exe 1.php的方式加载已经编写好的脚本文件执行。
由于cli模式的PHP没有其他软件的管理,可以理解为独立运行的php进程,因此没有超时一说,只要你的脚本逻辑未执行完成,php进程会一直存在。所以在CLI模式下的独立脚本中,可以充分利用php易编写,多内置函数,以及创建子进程等特性开发出优秀的数据处理功能。当然也可以利用流行的swoole等多协程扩展,可以开发出高性能的并发业务功能等。
但需要注意的是,PHP单独运行,只能理解为是本机应用,没有server服务器端的理解。所以PHP的超全局变量$_SERVER,$_POST,$_GET等是不存在的。
同时需要注意:cli模式下运行的php没有站点目录的限制,站点目录的划分实际上是服务器引擎软件nginx等软件的功能,其通过配置限制了php-fpm读取其他目录的权限,但cli模式下的php却可以读取任意目录文件。
2、网关运行模式即CGI模式-Common Gateway Interface
实际上一个PHP动态网页服务器,至少存在:WEB服务器引擎(NGINX,APACHE,IIS,KANGLE),PHP,MYSQL 三种软件互相配合运行,才能算是一个完整的动态网页服务器。但如果只安装一个web服务器引擎(NGINX,APACHE,IIS,KANGLE)之一,也能算是一个网页服务器,但只能算静态网页服务器,也就是只能访问打开.html,.htm后缀的静态网页文件,以及图片,视频等静态资源。
而在PHP动态服务器当中,PHP的工作原理与CLI模式区别很大。
根据不同的web服务器引擎,可以细分为FastCGI模式,mod_php5模块模式,ISAPI模式等。
其中FastCGL模式是比较流行通用的模式。在NGINX服务器引擎中,以php-fpm可执行文件为入口。其工作原理为php-fpm作为NGINX与php之间的桥梁,起到PHP进程管理的作用。
当nginx等web服务器引擎接收到用户浏览器请求后,根据请求路径资源,如果发现是静态资源,比如.html,jpg等,将直接发送资源二进制数据给客户端浏览器,PHP不会参与其中。
但当nginx发现请求路径是.php后缀的文件时,会首先加载硬盘文件资源到内存推送php-fpm进程,由php-fpm进程激活php-cgi进程解析PHP脚本内容,其执行结果将会包括html混编与php代码解析后的静态html内容返回给nginx(如果php脚本中有请求数据库的需要,php才会连接数据库请求数据),然后nginx才会发送已经被php解释过的包括html标签的二进制存静态网页发送给客户端浏览器。
mod_php5模式一般会用在apache引擎下
ISAPI模式一般会用在 IIS引擎下。
目前主流的php动态网页服务器配置为:
1)Apache+mod_php5
2)IIS+ISAPI
3)nginx+PHP-FPM
其中采用php-fpm方式运行php更通用,更高效。
在PHPCGI运行模式下,即网页运行模式下,实际上与客户端浏览器对接请求的是nginx等web服务器引擎软件。在高并发状态下,nginx的执行效率是非常高的,同时php-fpm常驻进程以及动态扩充子进程的工作原理,也可以充分保证php的执行效率。所以一般网页高并发执行效率的瓶颈,来自于mysql数据库的响应速度。
同时网页模式下的一些特点,http协议请求的业务属于tcp短连接业务,nginx为了维护多个客户端请求的业务,会有超时时间,而php-fpm进程管理器也有维护php响应时间的超时限制。
所以一般当php脚本中出现死循环,以及执行消耗时间过长的代码逻辑,都会有超时风险。所以不建议在网页模式下php代码中编写过于消耗时间的业务逻辑。其中包括curl远程请求资源,大量多维循环,不规范的sql语句查询等等,都会被计算到一次请求的总时长当中。

热议
推荐楼 pandaking 2小时前

好复杂啊,这么多字就有点眼花

2楼 Palpitace 3小时前

3楼 optimism 3小时前

挺好顶一下

4楼 88170351 3小时前

我顶

5楼 亦初 3小时前

6楼 mone 2小时前

顶一下 不错

8楼 du45273117 1小时前

这不是workerman还是swool的文档吗?复制粘贴什么算整理

9楼 kaleok 1小时前

这不是workerman还是swool的文档吗?复制粘贴什么算整理

绝对是我手写的哈。。不然你粘贴过来比对比对先

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 正在写一个手册,顺便发一下php执行的基础原理-kaleok
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活