【发布时间】:2012-03-30 17:50:56
【问题描述】:
我最近一直在学习 PHP 中的错误处理,遇到了error_log() function。
在 PHP 手册中,它讨论了所有错误日志类型,我理解所有类型,除了类型 3,它指出错误消息直接发送到 SAPI 日志记录处理程序。我的问题是 SAPI 到底是什么,你想什么时候使用它?
【问题讨论】:
我最近一直在学习 PHP 中的错误处理,遇到了error_log() function。
在 PHP 手册中,它讨论了所有错误日志类型,我理解所有类型,除了类型 3,它指出错误消息直接发送到 SAPI 日志记录处理程序。我的问题是 SAPI 到底是什么,你想什么时候使用它?
【问题讨论】:
SAPI 代表“服务器 API”(API 代表“应用程序编程接口”)。它是控制“外部世界”与 PHP/Zend 引擎之间交互的机制。所以,你总是想使用它。事实上,不费吹灰之力就无法避免使用它,因为即使 CLI 也被视为 SAPI。
【讨论】:
SAPI(服务器应用程序编程接口)也称为 Microsoft 的 ISAPI(Internet 服务器应用程序编程接口),NSAPI(Netscape 服务器应用程序) Netscape 的编程接口)。
API 含义。
对于 Web 开发人员,您可以想到 API,例如 REST、SOAP。您调用链接从服务器获取数据。它允许您与 Web 服务器交互。
SAPI 与 REST 或 SOAP 不同,SAPI 是用于服务器的 API(契约)。
例如:通用网关接口是一个 SAPI。如果一个 web 服务器支持 CGI 并且另一个可执行程序实现它,那么 web 服务器可以接口和动态生成网页。
看下图:
mod_php 实现了一个 apache 和 php 可以相互理解的接口。
SAPI到底是什么:它是服务器(任何类型的服务器)和程序之间的契约。只需遵守合同,他们不需要知道其他细节。
【讨论】:
php_sapi_name() 或 PHP_SAPI 常量。链接:php.net/php_sapi_name。 SAPI 也显示在phpinfo() 的输出中。 “cPanel”网络托管控制面板将 SAPI 称为“PHP 处理程序”。链接:documentation.cpanel.net/display/EA4/PHP+Handlers
来自Wikipedia:
也就是说,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)。
【讨论】:
对于 PHP,可用的 SAPI 有:Apache2 (mod_php)、FPM、CGI、FastCGI 和 CLI。
如果 API 运行在服务器上,它可能被称为 SAPI。
让我提醒一下,FPM(FastCGI 进程管理器)与 PHP FastCGI 实现非常接近,并具有一些(大部分)对重负载站点有用的附加功能。
今天,从速度和效率的角度来看,FPM 将是最进化的 SAPI。与其他提到的 SAPI 相比,Apache 或 Nginx 的性能会更好。
【讨论】: