PHP运行模式:CGI,Fast-CGI,PHP-FPM,PHP-Cli

PHP运行模式:CGI,Fast-CGI,PHP-FPM,PHP-Cli

PHP基础Git开源网2019-07-30 19:39:4466A+A-

PHP有多种运行模式,常见的Fast-CGI,PHP-FPM模式我们归纳为传统的web模式,还有一种模式属于命令行模式:PHP-Cli。他们之间有着怎么样的区别,看本文就够了。

CGI协议模式

CGI模式是指通用网关接口(Common Gateway Interface),它允许web服务器通过特定的协议与应用程序通信, 调用原理大概为:

用户请求->Web服务器接收请求->fork子进程 调用程序/执行程序->程序返回内容/程序调用结束->web服务器接收内容->返回给用户 。

由于每次用户请求,都得fork创建进程调用一次程序,然后销毁进程,所以性能较低。

Fast-CGI 协议模式

Fast-CGI是CGI模式的升级版,它像是一个常驻型的cgi,只要开启后,就可一直处理请求,不再需要结束进程, 调用原理大概为:

web服务器fast-cgi进程管理器初始化->预先fork n个进程

用户请求->web服务器接收请求->交给fast-cgi进程管理器->fast-cgi进程管理区接收,给其中一个空闲fast-cgi进程处理->

处理完成,fast-cgi进程变为空闲状态,等待下次请求->web服务器接收内容->返回给用户。


注意,Fast-CGI和CGI都是一种协议,开启的进程是单独实现该协议的进程。

PHP-FPM模式

PHP-FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。

它的功能包括:

  • 支持平滑停止/启动的高级进程管理功能;

  • 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);

  • stdout 和 stderr 日志记录;

  • 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;

  • 文件上传优化支持;

  • "慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;

  • fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);

  • 动态/静态子进程产生;

  • 基本 SAPI 运行状态信息(类似Apache的 mod_status);

  • 基于 php.ini 的配置文件。

PHP-FPM的工作原理大概为:

php-fpm启动->生成n个fast-cgi协议处理进程->监听一个端口等待任务

用户请求->web服务器接收请求->请求转发给php-fpm->php-fpm交给一个空闲进程处理 ->进程处理完成->php-fpm返回给web服务器->web服务器接收数据->返回给用户。

PHP-Cli模式

php-cli模式属于命令行模式,对于很多刚开始学php就开始wamp,wnmp的开发者来说是最陌生的一种运行模式。

该模式不需要借助其他程序,直接在控制台输入php xx.php 就能执行php代码。

命令行模式和常规传统的web模式明显不一样的是:

  • 没有超时时间

  • 默认关闭buffer缓冲

  • STDIN和STDOUT标准输入/输出/错误 的使用

  • echo var_dump,phpinfo等输出直接输出到控制台

  • 可使用的类/函数 不同

  • php.ini配置的不同

在php-cli中,是没有超时时间的,也无法通过 set_time_limit 设置超时时间,举个栗子:

<?php
set_time_limit(30);
while (1){
    echo 1;
    sleep(1);
}

这段代码,在常规web下运行,只要到30秒就会报Fatal error: Maximum execution time of 30 seconds exceeded in ......这样的错误。

而在php-cli中,这段代码将会一直执行,一直输出1到控制台中。

php有些扩展在常规web下运行时没用/没有意义的,例如:

swoole扩展

socket扩展

模块模式

Apache+PHP运行时,默认使用的是模块模式,它把php作为apache的模块随apache启动而启动,接收到用户请求时则直接通过调用mod_php模块进行处理,详细内容可自行百度。


转载:helloweba.net

本文标题:PHP运行模式:CGI,Fast-CGI,PHP-FPM,PHP-Cli
本文链接:https://gitoscc.com/?id=621
作者授权:除特别说明外,本文由 Git开源网 原创编译并授权 Git开源网_git开源代码资源网_git开源博客 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
点击这里复制本文地址 以上内容由Git开源网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

Git开源网_git开源代码资源网_git开源博客 © All Rights Reserved.  本站所上传资源,只用于交流学习所用。本站资源收集于网络以及网友投稿,其版权归原创者所有,如有侵害到你的权益,或有不妥之处,请联系我们删除,敬请谅解。
Copyright © Git开源网 All rights reserved. 黑ICP备18006154号-1 由ZBlog驱动

知道创宇云安全
网站管理