php一共分为五大运行模式
- cgi(通用网关接口Common Gateway Interface)
- fast-cgi(fast-cgi是cgi的升级版本)
- cli(Comman Line Interface)
- isapi(Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口)
- apache2handler(将php作为apache的模块,nginx类似)
其他(continuity,embed,litespeed,milter等)不常见
1、CGI运行模式
概述:CGI即通用网关接口Common Gateway Interface,它是一段程序,通俗的讲CGI就像是一座桥,把网页和web服务器中的执行程序链接起来,它把http服务器接收的指令传递给执行程序,再把执行程序的结果返还给http服务器。CGI的跨平台性极佳,几乎可以在任何操作系统上实现。
执行过程:
- http服务器接受到用户请求后,例如index.php,会通过它配置的CGI服务来执行
- 生成一个php-cgi.exe的进程,并执行php程序
- 执行的返回结果交给http服务器
应用场景:
- ·提供http服务
优点和缺点:
- ·跨平台,几乎可以在任何操作系统上实现
- ·web和server是独立的,结构清晰,可控性强
- ·性能比较差,来一个请求,fork一个进程,100个请求就会fork100个进程,消耗资源较多
- ·最近几年已经很少见到使用这种模式了
2、FASTCGI运行模式
概述:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与web服务器通信的协议。FastCGI是早期通用网关接口的增强版本。FastCGI致力于减少web服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。
执行过程:
- web服务器启动时,载入FastCGI进程管理器
- FastCGI进程管理器会启动多个CGI进程等待web服务器的链接
- 当客户端请求到达Web Server时,FastCGI进程管理器选择并链接到一个CGI解释器。Web server将环境变量和标准输入发送到FastCGI子进程php-cgi
- FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回web server。当FastCGI子进程关闭连接时,请求便告知处理完成。FastCGI子进程接着等待并处理来自FastCGI京城管理器(运行在Web Server中)的下一个链接。在CGI模式中,php-cgi在此便退出了。
优点和缺点:
- 跨平台,几乎可以在任何操作系统上实现
- web和server是独立的,结构清晰,可控性强,并不需要web升级而变化
- 支持大并发
- 多进程,消耗较多内存
3、CLI运行模式
概述:Command Line Interface的简称,即PHP命令行接口,在windows和linux下都支持PHP-CLI模式,它可以直接在命令行下运行,一位置完全可以不要任何http容器。例如 php test.php
应用场景:
- 定时任务
- 开发桌面应用就是使用php-cli和gtk包
- 开发shell脚本
优点和缺点:
- 利用crontab去跑php,可以给服务器减压,当然在这里有一个条件,就是实时性要求不高。比如:sns中的好友动态,这个实时要求不高,但是数据量比较大,这个时候定时跑的话,会给web服务器,数据库服务器分担不小的压力。
- 就是我们要定时去完成某一个事情,比如:我要删除一个月前,用户留言,这个时候,写的php脚本在crontab去执行,一天跑一次就行,而不是手动执行php程序。
- 无法为普通用户提供http服务
4、模块运行模式
指将php作为web服务器的一个模块运行
应用场景:
提供http服务
优点和缺点:
- 安装配置方便,不需要安装代码解析程序
- 支持多线程,占用资源少
- 支持大并发(实际上不如FastCGI模式)