什么是 SAPI,您会在什么时候使用它?

问题描述 投票:0回答:6

我最近一直在学习 PHP 中的错误处理,并遇到了

error_log()
函数

在 PHP 手册中,它讨论了所有错误日志类型,我理解所有错误日志类型,除了类型 3,它声明错误消息直接发送到 SAPI 日志记录处理程序。我的问题是 SAPI 到底是什么,您什么时候想使用它?

php sapi
6个回答
68
投票

SAPI 代表“服务器 API”(API 代表“应用程序编程接口”)。它是控制“外部世界”与 PHP/Zend 引擎之间交互的机制。所以,你总是想使用它。事实上,你无法避免不费吹灰之力就使用它,因为即使 CLI 也被认为是 SAPI。


62
投票

SAPI(服务器应用程序编程接口)也称为 ISAPI(Internet 服务器应用程序编程接口)用于 Microsoft,NSAPI(Netscape 服务器应用程序编程接口)用于 Netscape。

API 意思。

Web开发者可以想到REST、SOAP等API。您调用从服务器获取数据的链接。它允许您与网络服务器交互。

SAPI与REST或SOAP不同,SAPI是用于服务器的API(契约)。

例如:Common Gateway Interface是一个SAPI。如果一个网络服务器支持 CGI 并且另一个可执行程序实现它,那么网络服务器就可以动态地连接和生成网页。

看下图:

mod_php 实现 apache 和 php 可以相互理解的接口。

那么SAPI到底是什么:它是服务器(任何一种服务器)和程序之间的契约。只要遵守合同,他们不需要知道其他方面的细节。


19
投票

来自维基百科

换句话说,SAPI实际上是Web服务器提供的应用程序编程接口(API),以帮助其他开发人员扩展Web服务器功能。

举个例子,PHP 有一个直接的模块接口,称为 SAPI,用于不同的 Web 服务器;对于 Windows 上的 PHP 5 和 Apache 2.0,它以名为 php5apache2.dll 的 DLL 文件的形式提供,这是一个模块,除其他功能外,还提供 PHP 和 Web 服务器之间的接口,以以下形式实现服务器明白。这种形式就是所谓的 SAPI。

各种Web服务器扩展有不同种类的SAPI。例如,PHP 语言的另外两个 SAPI 是通用网关接口 (CGI) 和命令行接口 (CLI)。


14
投票

对于 PHP 可用的 SAPI 是:Apache2 (mod_php)、FPM、CGI、FastCGI 和 CLI。

有争议的是,如果 API 在服务器上运行,它可能被称为 SAPI。

让我提醒一下,FPM(FastCGI 进程管理器)非常接近 PHP FastCGI 实现,具有一些(主要)对重负载站点有用的附加功能。

今天,从速度和效率的角度来看,FPM 将是最先进的 SAPI。与其他提到的 SAPI 相比,Apache 或 Nginx 的性能会更好。


1
投票

一般来说,PHP 应用程序很少需要知道它们的 SAPI。如果要从 cron 调用脚本而不是从 Web 浏览器调用脚本,这通常很重要,在这种情况下,它会检查它的 SAPI 是否等于“cli”


0
投票

我不是专家,但据我了解...

sapi 是 http 服务器软件与 cgi 解释器通信的通道,生成执行上下文(shell,套接字或端口),读取传递的环境变量,读取指定文件(通过环境变量指定,如 SCRIPT_NAME),解释文件并将生成的 html 代码返回给服务器以传递给 http 客户端(即浏览器)

如果是 php,sapi 可能是...

  • shell/cmd 实例,如果是 cgi(windows 中的 php-cgi 或 php.cgi.exe)
  • unix 套接字或管道,如果是 fastcgi(php-cgi 或 php[.exe])
  • 一个 tcp 或 unix 套接字,如果是 fpm (php-fpm)
  • 我不知道的其他频道

例如,php

error_log('my msg', 4)
将通过当前 sapi 的“stderr”流将消息发送回网络服务器,网络服务器软件将捕获该消息并将显示在其自己的错误日志工具中(
/var/log/nginx/error.log
在我的例子中是文件)由他的 CGI 解释器抛出

我不确定,如果我错了请纠正我

© www.soinside.com 2019 - 2024. All rights reserved.