SAPI 即 Server API ,是应用程序与外部程序的通讯协议。
在PHP源码的sapi目录下就是当前版本提供的SAPI列表:

apache2handler
cgi
embed
cli
litespeed
phpdbg

编译后你就会看到php, php-cgi, php-fpm三个可执行程序。

如果是在win环境下会看到php.exe, php-cgi.exe文件。

php
在cli模式下运行的程序,用来解释运行PHP代码。php-cgi
实现了fastcgi协议的程序。当你使用phpstudy构建WNMP环境的时候,phpstudy它会启动一个php-cgi进程并监听9000端口,然后你需要
配置nginx的fastcgi_pass参数。如果觉得一个进程不够用,可以自己启动多个,使用命令
php-cgi.exe -b 127.0.0.1:9001 -c D:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.iniphp-fpm
fastcgi process manager 即用来管理fastcgi进程,php-fpm程序实现了fastcgi并可以优雅的管理多进程,因为php-cgi是单个的
进程,并发处理能力很弱,当然你也可以手动多开,但是依然难以管理,而fpm的出现主要是解决这个问题的,当然它不是简单的管理php-cgi
,而是重新实现了fastcgi协议并增加了很多管理功能,目前只有Linux环境可以用。

那么,如何知道当前PHP程序是运行在哪个SAPI下呢?

<?php
echo PHP_SAPI;
?>

分别通过nginx,apache,命令行访问;会依次返回 fpm-fcgi, apache2handler, cli。
或者
命令行下 php -i |grep API
Server API => Command Line Interface

web环境下

<?php
phpinfo();
?>

找到 Server API FPM/FastCGI

并且由此可以看出,在不同的运行模式下,查看phpinfo得到的信息是不一样的,因为php会根据当前模式优化默认配置以及php.ini的配置。

SAPI从使用场景来看大致有:

1CLI(Command Line Interface),即命令行接口;
2CGI(COmmon Gateway Interface);即通用网关接口,也就是要走网络通讯。

至于什么是cgi, fastcgi 不是这里要讨论的内容,可以移步 https://blog.csdn.net/raoxiaoya/article/details/103280995

那么为什么PHP要使用fastcgi呢,还搞出这么多运行模式?

为了配合apache服务器,实现了 apache2handler。
为了配合nginx服务器,实现了 fastcgi。
之前还有基于IIS的协议实现。
。。。。。。
究其原因,PHP是单线程的,这就决定了如果用PHP程序来作为web服务器,其并发能力有限,但是基于nginx+php-fpm架构,其瓶颈也在php-fpm进程,但是也正是因为这种架构才使得PHP在早些年得以发展起来,我们知道java开发的web应用就不需要实现fastcgi,它只需要配合nginx的负载均衡等功能即可;当然目前基于swoole的应用也不再需要fastcgi,与java服务一样的运行,但是如果swoole能早点出现,PHP就不是现在的局面了。

关于SAPI的实现细节可参考鸟哥的文章 https://www.laruence.com/2008/08/12/180.html

PHP中的SAPI是什么,都有那些模式?相关推荐

  1. 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?

    写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...

  2. 这些Spring中的设计模式,你都知道吗?

    来自: itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆 ...

  3. 如何控制在一个软件中特殊的字符比如#都显示为红色呢?该字符是作为标签中的内容出现的,可能出现在JLABEL,JCheckBox,JCombox的标签中的,

    如何控制在一个软件中特殊的字符比如#都显示为红色呢?该字符是作为标签中的内容出现的,可能出现在JLABEL,JCheckBox,JCombox的标签中的, 1)在资源文件中该如何配置, 2)如果是硬编 ...

  4. python buildin 中的一些类中为什么方法的内容都是pass?

    python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...

  5. 「从源码中学习」面试官都不知道的Vue题目答案

    前言 当回答面试官问及的Vue问题,我们除了照本宣科的回答外,其实还可以根据少量的源码来秀一把,来体现出你对Vue的深度了解. 本文会陆续更新,此次涉及以下问题: "new Vue()做了什 ...

  6. python将大于输出列表_程序检查列表中的所有值是否都大于Python中的给定值

    在本教程中,我们将检查列表中的所有元素是否都大于数字.例如,我们有一个列表[1.2.3.4.5]和一个数字0.如果列表中的每个值都大于给定值,则返回True,否则返回False. 这是一个简单的程序. ...

  7. 在python中、处理的一切都是对象_Python 3+ 一切都是对象

    对于 Python 来说,一切都是对象 . 这句话很重要,当你对某个特性不了解时,回想下这句话也许就能想通 一个整数一个对象,一个浮点数也是一个对象,一个函数也是一个对象 >>> i ...

  8. Java黑皮书课后题第8章:*8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上。编写下面的方法,检测points数组中所有的点是否都在同一条直线上

    *8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上.编写下面的方法,检测points数组中所有的点是否都在同一条直线上 题目 题目描述与运行示例 破题 ...

  9. 很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置 文件内容的对象,则在系统运行中,有 很多地方都需

      很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据.   如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象,则在系统运行中,有很多地方 ...

  10. C语言试题四十九之只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。 n 给出了字符串的长度,h字符串中前导*号的个数,e给出了字符串中最后的*个数

    1. 题目 假定输入的字符串中只包含字母和*号.请编写函数function,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除.形参n 给出了字符串的长度,形参h给出了字符串中前导* ...

最新文章

  1. 美多商城之购物车(购物车管理3)
  2. 清华大学矣晓沅:“九歌”——基于深度学习的中国古典诗歌自动生成系统
  3. cmd查看python安装路径-从cmd如何查找python的安装路径?
  4. [Spring cloud 一步步实现广告系统] 20. 系统运行测试
  5. js获取当前页面的参数,带完善~~~
  6. Spring事件机制详解
  7. RocketMQ入门
  8. .NetCore从零开始使用Skywalking分布式追踪系统
  9. 小程序开发工具不显示tobar图标
  10. python3 之 天天生鲜 项目 缓存cache
  11. Hyperledger fabric 区块结构、交易结构
  12. 推荐一个互联网电子书免费下载网站
  13. 图解通信原理与案例分析-13:无线对讲机案例--频率调制实现语音点对点无线通信
  14. Rigify:关于Rigify生成最终绑定时失败的原因及解决办法
  15. c++ 光标移动定位
  16. 服务器winsxs文件夹怎么清理工具,win7如何使用WinSxS工具安全删除WinSxS文件夹垃圾...
  17. PY_GD_1 Python使用print()函数时输出不含多余空格的数据
  18. 《杭州区块链行业发展报告》披露市场现状
  19. 计算机 语言学 交叉,计算机和语言学
  20. 使用construct2制作简单游戏

热门文章

  1. c语言学生成绩系统综合实验,C语言学生管理系统_综合实验报告.docx
  2. ScrollView分屏显示
  3. Python 练习实例100-39,有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  4. 2017级算法第二次上机-C.芸如的入学测试
  5. Python操作Excel表格(二)
  6. 国密SM2签名之公私钥及证书生成
  7. 小牛情报APP最强攻略
  8. 双窗格文件管理器:Commander One PRO Mac中文版
  9. Wifi网络共享----Wifi共享精灵
  10. 京东金融云发布了,这和人工智能有什么关系?