PHP的运行模式
SAPI:Server Application Programming Interface 服务器端应用编程端口。它就是PHP与其它应用交互的接口,PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中
SAPI 提供了一个和外部通信的接口, 常见的有五大运行模式:
- cgi (通用网关接口Common Gateway Interface)
- fast-cgi (fast-cgi 是cgi的升级版本)
- cli (Command Line Interface)
- isapi (Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口)
- apache2handler (将php作为apache的模块, nginx类似)
- 其他(continuity, embed, litespeed, milter等)
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服务
- <?php
- echo "\n";
- echo $argc;
- echo "\n";
- root@ubuntu:~$ php test.php aaa ccc bbbb
- Array
- (
- [0] => test.php //参数0,文件本身
- [1] => aaa //参数1
- [2] => ccc //参数2
- [3] => bbbb //参数3
- )
-
- 4 //$argc的值,参数的总数
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进程,消耗资源较多(fork-and-execute 模式)
- 最近几年已经很少见到使用这种模式了
FASTCGI运行模式
快速通用网关接口( Fast Common Gateway Interface/FastCGI )是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。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在此便退出了。
应用场景
- 提供http服务
优点和缺点
- 跨平台,几乎可以在任何操作系统上实现.
- web和server是独立的,结构清晰,可控性强,并不需要web升级而变化
- 支持大并发
- 多进程,消耗较多内存
模块运行模式
模块模式指将php作为web服务器的一个模块运行
应用场景
- 提供http服务
优点和缺点
- 安装配置方便,不需要安装代码解析程序
- 支持多线程,占用资源少
- 支持大并发