您的位置  > 互联网

web服务器没有处理php文件的功能,就会请求解释器

什么是 php-cgi

系统上,安装完php后,安装目录下有以下三个文件:

php.exe
php-cgi.exe
php-win.exe

以上三个文件互不影响。 我在本地测试了一下,删除了其中两个,另一个有效。

从命令行运行 php 文件

F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>
F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts> php F:\softwares\phpStudy\PHPTutorial\index.php
Hello World #php.exe运行结果
F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgi F:\softwares\phpStudy\PHPTutorial\index.php
X-Powered-By: PHP/7.2.1 #php-cgi.exe运行结果
Content-type: text/html; charset=UTF-8 #php-cgi.exe运行结果
Hello World #php-cgi.exe运行结果
F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-win 
F:\softwares\phpStudy\PHPTutorial\index.php #php-win.exe运行,结果是空行
F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>

如何支持php

调用PHP的方式有三种,模块,cgi等,这些方式网上都可以找到。 下面解释其原理。

模块:这是对 PHP 的独特支持。 Nginx没有这个方法。 这样就可以直接处理PHP脚本了。 至于多进程、多线程的工作方式,就看它了。 参与:三种工作模式介绍及配置 cgi(通用网关接口):当有php脚本需要处理时,通过cgi协议调用php解释器php-cgi.exe,php-cgi.exe将读取 php.ini 配置文件,作为子进程。 这里有一个缺点:如果客户端浏览器发出更多请求,就会创建很多子进程,并且每次都会重新读取 php.ini 配置文件。 这是一个为解决cgi问题而开发的协议。 协议规定,php-cgi.exe我将不再是你的子进程,我将独立,所以你可以放心! 我形成了一个单独的服务,它指定了一个主进程并启用了多个进程。 负责php.ini和其他配置文件,以及接收传入的请求,并将它们分配给进程进行处理。 这样,协议程序作为客户端,协议程序作为服务器。 这个协议程序就是PHP-fpm,也就是该协议的具体实现。

什么是 cgi 和

它们都是解决cgi一些缺点的协议。

什么是 php-cgi.exe 和 PHP-fpm?

php-cgi.exe 是一个解释器,也可以用作简单的 cgi/管理器。 比如系统中nginx是如何与php结合的? Linux使用php-fpm,但是没有php-fpm。 这时,当你打开任务管理器时,你会发现CGI/(32位)进程,nginx是它的反向代理。 。

location ~ \.php(.*)$ {
 fastcgi_pass 127.0.0.1:9000; #这里的9000端口就是``php-cgi.exe``监听的
 fastcgi_index index.php;
 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 include fastcgi_params;
 }

我们来看看命令行中php-cgi.exe的帮助。 它还可以执行一些简单的配置。

F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgi -h
Usage: php [-q] [-h] [-s] [-v] [-i] [-f ]
 php  [args...]
 -a Run interactively
 -b | Bind Path for external FASTCGI Server mode
 -C Do not chdir to the script's directory
 -c | Look for php.ini file in this directory
 -n No php.ini file will be used
 -d foo[=bar] Define INI entry foo with value 'bar'
 -e Generate extended information for debugger/profiler
 -f  Parse . Implies `-q'
 -h This help
 -i PHP information
 -l Syntax check only (lint)
 -m Show compiled in modules
 -q Quiet-mode. Suppress HTTP Header output.
 -s Display colour syntax highlighted source.
 -v Version number
 -w Display source with stripped comments and whitespace.
 -z  Load Zend extension .
 -T  Measure execution time of script repeated  times.

什么是 php-fpm?

PHP-fpm就是进程管理器,它的概念并不模糊! 它启动服务监听端口,通过nginx反向代理到它,并且有自己内置的php解释器。 但是,以上不能与 PHP-fpm 一起使用。

对于客户端浏览器来说,nginx/是服务器。 对于 PHP-fpm,/nginx 是客户端。

总结

cgi是一种协议,一种标准,是Web服务器和后台脚本语言之间的协议。

php-cgi 和 PHP-fpm 是程序。 至于php-cgi是解释器还是管理器,网上有很多说法。 而且,它还可以监听端口并处理Web服务器代理的请求,因此它是一个简单的cgi/进程管理器。 经理!

参考

不知道和PHP-fpm有什么关系

PHP连接方法介绍以及如何攻击PHP-FPM

php-cgi 和 php-fpm 之间有什么关系?

三种工作模式介绍及配置

php 手册:在旧系统上安装

php-cgi 和 php-fpm 之间有什么关系?