c语言编程笔录

首页 >   > 笔记大全

笔记大全

PHP7内核剖析之CGI与FastCGI

更新时间:2023-09-14

PHP7内核剖析之CGI

CGI是Common Gateway Interface的缩写,中文名叫通用网关接口。它是一种通用的协议,支持在Web服务器与程序之间传递信息,并且使用CGI协议可以让Web服务器调用程序生成动态的Web页面。

在PHP7中,CGI可以通过Apache、Nginx和IIS等Web服务器来实现。CGI要求每次请求都必须启动一个新进程,这种方式会影响性能,所以后来出现了FastCGI协议。

//示例代码
//获取GET请求中的name参数
$name = $_GET['name'];
echo "Hello, ".$name."!";

PHP7内核剖析之FastCGI

FastCGI是CGI的改进版。它与CGI最大的区别在于,它不会启动一个新进程来处理每个请求,而是使用一个长连接来处理多个请求,从而更加高效地执行PHP程序。

FastCGI通过建立一个守护进程,该进程会一直运行来处理请求。所有请求都由这个守护进程来接收,并分配给已经运行的PHP进程。PHP进程会处理请求后,将结果返回给守护进程,由守护进程再将结果返回给Web服务器。

//示例代码
//获取GET请求中的name参数
$name = $_GET['name'];
echo "Hello, ".$name."!";

PHP7内核剖析之使用CGI模式运行PHP

在PHP7中,如果要使用CGI模式运行PHP,可以使用以下命令:

php-cgi -b 127.0.0.1:9000

该命令会启动一个CGI进程来处理请求,同时监听本地的9000端口。如果要在Web服务器中使用CGI模式运行PHP,可以将Web服务器的配置文件中配置如下:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName www.example.com
    <Directory /var/www/html>
        Options +ExecCGI
        AddHandler cgi-script .php
    </Directory>
    <FilesMatch "\.php$">
        SetHandler cgi-script
    </FilesMatch>
    ScriptAlias /php-bin/ /usr/local/bin/
    Action php-bin /php-bin/php-cgi
</VirtualHost>

PHP7内核剖析之使用FastCGI模式运行PHP

在PHP7中,如果要使用FastCGI模式运行PHP,可以使用以下命令:

php-fpm -y /etc/php-fpm.conf

使用该命令会启动PHP-FPM进程,并使用/etc/php-fpm.conf配置文件来配置FastCGI进程池。Web服务器可以直接与PHP-FPM进行通信来执行PHP程序。示例的PHP-FPM配置文件如下:

[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
include=/etc/php-fpm.d/*.conf

[www]
user = php-fpm
group = php-fpm
listen = 127.0.0.1:9000

总结

PHP7中支持使用CGI和FastCGI来运行PHP程序,并且在性能上FastCGI比CGI更优秀。在使用CGI模式下,每次请求都需要启动一个新的进程,而使用FastCGI模式则可以使用长连接来处理多个请求,提高了服务器的性能。

在Web服务器中,可以通过配置AddHandler或者SetHandler指令来使用CGI或FastCGI模式执行PHP程序。同时,可以使用php-cgi命令或php-fpm命令来启动CGI或FastCGI进程。