SAPI:Server Application Programming Interface 服务端应用编程端口他就是 php 与其他应用交互的接口, php 脚本要执行有很多中方式, 通过 web 服务器, 或者直接在命令行行下, 也可以嵌入其他程序中 SAPI 提供了一个和外部通信的接口, 常见的 SAPI 有: cgifast-cgicliApache 模块的 dll 等
1CGI
CGI 即通用网关接口(common gatewag interface), 它是一段程序, 通俗的讲 CGI 就象是一座桥, 把网页和 WEB 服务器中的执行程序连接起来, 它把 html 接收的指令传递给服务器的执 行程序, 再把服务器执行程序的结果返还给 HTML 页 CGI 的跨平台性能极佳, 几乎可以在任何操作系统上实现
CGI 方式在遇到连接请求 (用户 请求) 先要创建 cgi 的子进程, 激活一个 CGI 进程, 然后处理请求, 处理完后结束这个子进程这就是 fork-and-execute 模式所以用 cgi 方式的服务器有多少连接请求就会有多少 cgi 子进程, 子进程反复加载是 cgi 性能低下的主要原因都会当用户请求数量非常多时, 会大量挤占系统的资源如内 存, CPU 时间等, 造成效能低下
2FastCGI
fast-cgi 是 cgi 的升级版本, FastCGI 像是一个常驻 (long-live) 型的 CGI, 它可以一直执行着, 只要激活后, 不会每次都要花费时间去 fork 一 次 PHP 使用 PHP-FPM(FastCGI Process Manager), 全称 PHP FastCGI 进程管理器进行管理
Web Server 启动时载入 FastCGI 进程管理器 (IIS ISAPI 或 Apache Module)FastCGI 进程管理器自身初始化, 启动多个 CGI 解释器进程(可见多个 php-cgi) 并等待来自 Web Server 的连接
当客户端请求到达 Web Server 时, FastCGI 进程管理器选择并连接到一个 CGI 解释器 Web server 将 CGI 环境变量和标准输入发送到 FastCGI 子进程 php-cgi
FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回 Web Server 当 FastCGI 子进程关闭连接时, 请求便告处理完成 FastCGI 子进程接着等待并处理来自 FastCGI 进程管理器 (运行在 Web Server 中) 的下一个连接 在 CGI 模式中, php-cgi 在此便退出了
在上述情况中, 你可以想象 CGI 通常有多慢每一个 Web 请求 PHP 都必须重新解析 php.ini 重新载入全部扩展并重初始化全部数据结构使用 FastCGI, 所有这些都只在进程启动时发生一次一个额外的 好处是, 持续数据库连接 (Persistent database connection) 可以工作
3APACHE2HANDLER
PHP 作为 Apache 模块, Apache 服务器在系统启动后, 预先生成多个进程副本驻留在内存中, 一旦有请求出 现, 就立即使用这些空余的子进程进行处理, 这样就不存在生成子进程造成的延迟了这些服务器副本在处理完一次 HTTP 请求之后并不立即退出, 而是停留在计算机中等待下次请求对于客户浏览器的请求反应更快, 性能较高
4CLI
cli 是 php 的命令行运行模式, 大家经常会使用它, 但是可能并没有注意到(例如: 我们在 linux 下经常使用 php -m 查找 PHP 安装了那些扩展就是 PHP 命令行运行模式;
来源: https://www.php1.cn/detail/php-f4c4418f50.html