商城首页欢迎来到中国正版软件门户

您的位置:首页 >php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释

php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释

  发布于2026-04-20 阅读(0)

扫一扫,手机访问

一、前言

相信不少PHP开发者都曾对“sapi”这个概念感到好奇。上网一搜,满眼都是fpm、cgi、fastcgi、php-cgi这些术语,看得人眼花缭乱。

php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释

直到后来,笔者仔细研读了鸟哥那篇经典文章(戳这里),并查看了PHP源码中的sapi目录,才算是真正拨开了迷雾。

二、sapi是什么

要理解sapi,得先看看PHP的架构体系。简单来说,sapi是PHP提供的一套接口规范(当然,用“接口”这个词可能还不够精确,欢迎指正)。正是通过这套规范,外部的各种程序(比如Web服务器)才能顺利地调用并执行PHP脚本。

那么,PHP具体提供了哪些sapi呢?看下面这个列表就清楚了:

  • apache2handler
  • cgi
  • cli
  • embed
  • fpm
  • litespeed
  • phpdbg

三、核心概念辨析

cgi

先说CGI。它的本质,是Web服务器与外部应用程序之间约定好的一套数据交换协议。而php-cgi,就是PHP实现这套协议的一个具体程序。不过,这种模式有个老生常谈的问题:每次收到请求,都需要启动一个新的php-cgi进程,开销不小。

fastcgi

正因为CGI每次“现用现起”的方式效率不高,FastCGI协议应运而生。它的核心改进,就是让CGI程序能够常驻内存,无需为每个请求都经历一次启动、加载配置、初始化的完整过程。这样一来,性能自然就上去了。

php-fpm

理解了FastCGI,php-fpm就很好懂了。它正是PHP对FastCGI协议的一种具体实现,也就是上面sapi列表里的那个“fpm”。在编译PHP时,我们常会看到 --enable-fpm 这个选项。

这里有个历史小知识:在PHP 5.3.3版本之前,php-fpm是以一个独立补丁包的形式存在的,主要目标就是将FastCGI进程管理功能整合进PHP。而从5.3.3版本开始,它已经被正式收录,并默认编译进PHP的核心包里了。

如果想对PHP-FPM的源码机制有更深入的了解,可以看这里()。

php-cgi

最后说说php-cgi。结合上面的解释,它的身份就很明确了:它就是PHP为了实现标准CGI协议而编写的那个程序。当然,这个理解是基于当前普遍的认知,如果有更精确的解读,也欢迎探讨。

以上就是对PHP sapi及相关概念的梳理。如果大家有任何疑问或不同见解,欢迎留言一起讨论!

本文转载于:https://blog.csdn.net/github_37030657/article/details/82809241 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注