一:CGI协议模式

1:什么是CGI协议?

  • CGI 和 FASTCGI都是一种通信协议,独立于任何语言。
  • 通用网关接口(COMMON GATEWAY INTERFACE),它允许WEB服务器通过特定的协议与应用程序通信,此处是指PHP应用程序。
  • 除 PHP 有 PHP-FPM 外,像 PYTHON, RUBY, PERL, TCL, C/C++, 和 VISUAL BASIC 都有其各自的 CGI 和 FASTCGI 实现。

2:cgi模式调用的原理

  1. 用户请求
  2. Web服务器接收请求
  3. fork子进程 调用程序/执行程序
  4. 程序返回内容/程序调用结束
  5. web服务器接收内容
  6. 返回给用户 由于每次用户请求,都得fork创建进程调用一次程序,然后销毁进程,所以性能较低。

二:FastCGI模式(lnmp)

FastCGI是CGI模式的升级版,它像是一个常驻型的cgi,只要开启后,就可一直处理请求,不再需要结束进程。 常用的nginx+php-fpm 就是这种模式(php-fpm (PHP FastCGI Process Manager ) ,是一个FastCGI的管理器。)

1:调用原理

  1. web服务器fast-cgi进程管理器初始化
  2. 预先fork n个进程
  3. 用户请求
  4. web服务器接收请求
  5. 交给fast-cgi进程管理器
  6. fast-cgi进程管理区接收,给其中一个空闲fast-cgi进程处理
  7. 处理完成,fast-cgi进程变为空闲状态,等待下次请求
  8. web服务器接收内容->返回给用户

2:CGI和FastCGI区别

  • CGI 程序运行在独立的进程中,并对每个 Web 请求创建一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量创建和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用

  • FastCGI 致力于减少网页服务器与 CGI 程序之间交互的开销,从而使服务器可以同时处理更多的网页请求。与为每个请求创建一个新的进程不同,FastCGI 使用持续的进程来处理一连串的请求。

三:模块模式(lamp)

apache+php运行时,默认使用的是模块模式, 它把php作为apache的模块随apache启动而启动,接收到用户请求时则直接通过调用mod_php模块进行处理。

四:php-cli模式

1:什么是php-cli模式?

  • php-cli模式属于命令行模式。
  • 该模式不需要借助其他程序,直接输入php xx.php 就能执行php代码

2:命令行模式和传统web模式差别

  • 没有超时时间。
  • 默认关闭buffer缓冲,在常规web模式中,echo,var_dump,phpinfo等输出语句/函数,默认情况是先进入php缓冲区,等缓冲区到达一定数量,才开始传输给web服务器的,但是在php-cli模式中,默认关闭buffer,直接输出到控制台。
  • STDIN和STDOUT标准输入/输出/错误 的使用。
  • php.ini配置的不同。
  • swoole扩展是运行在命令行模式下的。