PHP CGI,或者叫做 CGI Mode,是 PHP 脚本运行的一种模式,它是通过 web 服务器来运行的一个外部的进程。在这种模式下,每次执行 PHP 脚本都需要重新创建进程,所以相比于其他模式,它的效率可能会稍低。
但是,PHP CGI 也有其独特的优点。比如说,在一些不能直接支持 PHP 解析的 Web 服务器上(比如 Microsoft IIS),我们可以采用将 PHP 放在 CGI 模式下来解决,因为这个时候 PHP 是一个独立的进程,我们可以从服务器中获取到它的返回结果。
相比于模块模式,CGI 模式一个更好的特点是:在一些共享主机上,因为 PHP 的模块没有被安装,我们只能去限制建立 Web 应用程序。3
然后,我们来看一下 PHP 使用 CGI 模式时,具体的处理方式和运行流程:
1. 收到 HTTP 请求。2. 检查请求的文件是否是 PHP 文件以及对应的文件地址。3. 如果是 PHP 文件,则启动 PHP 的 CGI 进程。4. 将 HTTP POST 或 GET 数据传入到 CGI 进程中,同时设置一些额外的环境变量来传递更多信息。5. CGI 进程开始执行 PHP 脚本。6. 执行完成后,将执行结果返回给 Web 服务器。7. Web 服务器将结果返回给客户端浏览器。
CGI 模式下,为了处理 CGI 程序的输入和输出,在 Apache 的主配置文件(httpd.conf)中要设置scriptAlias /cgi-bin/ "/var/www/cgi-bin/"
之类的语句,这意味着 Web 服务器需要将所有以 /cgi-bin/ 开头的请求都映射到你的 cgi-bin 目录下面。例如,我们可以将一个 CGI 脚本命名为 test.cgi,然后将它存储在 /var/www/cgi-bin/ 下。
另外,为了在 CGI 脚本中方便地获取调用参数,PHP 定义了一些预定义的全局变量。比如,我们可以使用$_GET
和$_POST
来获取提交的数据。以这样的方式来编写脚本会使得你的代码更通用。
总的来说,CGI 模式是一种不错的运行方式,特别适用于一些不支持 PHP 模块的服务器环境。CGI 模式下的 PHP 进程是独立的,并且可控性非常高,因为在运行过程中,我们可以随时检查、杀死它。虽然相比于其他运行模式,它的效率会稍低,但是如果我们需要在特定的环境下运行 PHP,就需要了解并尝试使用 CGI 模式。