PHP7内核剖析之CGI与FastCGI
更新时间:2023-09-14PHP7内核剖析之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进程。