资料来源于网络
CGI:“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。在服务器环境中,为“程序”提供标准的接口,通过这个接口,“程序”可以对服务器与客户端交换的信息做一些事情。“程序”的语言并没有要求。程序对接口进行操作。服务器要支持CGI就要提供CGI中要求的环境变量,或者还有别的。即CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。
CLI:“ 命令行界面”(Command Line Interface),可在用户提示符下键入可执行指令的界面。
SAPI:“ 服务器应用程序接口”(Server Application Programme Interface),可以认为是服务器端的API。貌似和CGI是一个东西,每个服务器提供的API可能不同,但是他们都提供了CGI。所以可以理解CGI是每个服务器都应该有的SAPI。apache有自己的SAPI,IIS也有自己的。但是php能这些不同的服务器端工作,因为php支持了它们各自的SAPI。(CGI和CLI都是SAPI的类型) 【参考资料:PHP内核探索:从SAPI接口开始】
ISAPI:ISAPI 服务器扩展是可以被 HTTP 服务器加载和调用的 DLL。Internet 服务器扩展也称为 Internet 服务器应用程序 (ISA),用于增强符合 Internet 服务器 API (ISAPI) 的服务器的功能。ISA 通过浏览器应用程序调用,并且将相似的功能提供给通用网关接口 (CGI) 应用程序。
php的CLI 和 CGI
PHP 5 中对 CLI 和 CGI 文件名作了些改变。PHP 5 中,CGI 版本被改名为 php-cgi.exe(以前是 php.exe),现在主目录中的是 CLI 版本(之前是 cli/php.exe)。
PHP 5 中引进了一种新模式:php-win.exe。这和 CLI 版本相同,只除了 php-win 不输出任何内容,因此不会提供控制台(屏幕上不会闪过“dos 窗口”)。此行为类似 php-gtk。
PHP 5 中,CLI 版本总会产生全局变量 $argv 和 $argc 而不管 php.ini 是怎么设的。即使将 register_argc_argv 设为 off 也不影响 CLI。