CGI 和 CLI

PHP 提供两种运行方式,GCI 和 CLI,在其 bin 目录里对应的分别就是 php-cgi 和 php 两个可执行程序, 简单介绍这两种运行方式:

CGI

全程 Common Gateway Interface,中文直译:通用网关接口。

CGI 是第一个,可能仍然是得到最广泛使用的服务器扩展。在 Web 上广泛用于动态 HTML、信用卡处理以及数据库查询等任务。

--《HTTP 权威指南》

回想一下上一章提到了 Nginx 作为 Web 服务器,它本身不具备解释执行 PHP 程序的能力,而 phper 们都是 .php 扩展名的代码,执行 .php 的代码就需要借助于 php 解释器,可是如果一个 python 程序员与它通信怎么办?

打个比方,说中文的中国人和说日语日本人都需要跟一个说英语美国人说话,而这个说英语的美国人没办法做到精通八国语言,那大家就约定了,中国人和日本人都说英语。这种约定,在计算机界,就称之为协议。

CGI就是一种协议,早期主流服务器软件开发商还是都使用 CGI 作为大家都认可的标准协议去开发服务器软件,这样开心的过了几年,随着接入互联网的设备和用户开始大爆炸式的增长,CGI 的缺点就完全暴露出来了:

CGI程序运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。

-- Wikipedia

然后 FastCGI 应运而生,它作为 CGI 的增强版本,就像名字中一样,致力于减少网页服务器与CGI程序之间互动的开销,从而提升服务器的处理效率。

FastCGI 程序是常驻进程,它通过 socket 与 Web 服务器通信, 而在 PHP7 中,一般使用 PHP-FPM 来管理一堆 FastCGI,也就是 PHP-CGI 进程。

CLI

cli 模式就是我们熟知的在命令行去运行一个 php 脚本或者一段 php 代码的方式。通常的使用姿势都是用它来跑一些常驻进程的任务或者定时执行的任务。

results matching ""

    No results matching ""