php 的几种运行方式
CGI
FAST-CGI
Web-module
CLI

CGI
CGI (Common Gateway Interface) 是通用网关型接口,CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。简单的说,就是当你的 php引擎和web服务器相互传递消息时,CGI 规定了一套标准来规范如何传递数据以及数据传递的格式。

当 web 服务器接收到一个请求时,就会启动一个 CGI 进程,这里就会通知到PHP 引擎,然后去解析 php.ini 文件,开始处理请求,并且将处理的请求的结果以标准的格式返回给 web 服务器,并退出进程。

CGI工作原理
浏览器
浏览器
web服务器
web服务器
CGI应用程序(php引擎)
CGI应用程序(php引擎)
发送请求
启动一个 CGI 进程
发送解析好的信息
发送 html 信息
显而易见的是,这样每一个请求过来的话都会重新去启动一个 CGI 进程,关键是每个进程又都会去启动引擎去解析 php.ini 文件,这样当请求多的时候,效率会非常的低。因而,已经逐渐被抛弃。

注意:需要明确的是 CGI 只是一套接口标准,具体的实现程序才是用来启动进程的。比如根据 CGI 实现的 php-cgi 程序。

FAST-CGI
既然 CGI 是如此的效率低下,聪明的人类肯定能够想出更好的方法来使得 CGI 更加高效,对的,这就是 FAST-CGI。

FAST-CGI 也是一种通用网关型接口,是建立在 CGI 的基础上进化而来,FastCGI 像是一个常驻(long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 
简单理解呢,大概是这样:当web服务器启动时,会载入Fast-CGI 进程管理器,FastCGI进程管理器会同时开启多个 CGI 子进程,相当于一个进程池,当 web 请求到来时,会选择一个 CGI 解释器并连接,处理完成后将信息返回给web服务器,这时候,该子进程又会回到进程管理器中继续等待下一个连接,所以这样不需要每次都去重新启动进程,加载配置文件。

fast-cgi 工作原理
web服务器
web服务器
fastcgi进程管理
fastcgi进程管理
cgi子进程
cgi子进程
启动载入
启动多个
请求
连接一个
返回解析并重新等待新的请求
php-cgi 只是用来处理 cgi 进程的程序,那 php fast-cgi 进程管理器是怎么实现的呢,php-fpm ,对的,就是它,php-fmp 用来管理和调度这些 php fast-cgi 进程

注意:还是需要明确一下,fast-cgi 也只是一套协议标准,php fast-cgi才是具体的实现程序,php-fpm是实现了对 fast-cgi 的进程管理。

Web-module
这个简称为 web 模块加载模式,想必用 apache 搭建过 php 环境的应该都了解,apahce 需要加载 mod-php5 模块,这个模块就是用来将 Apache 传递过来的 php 文件的请求,并处理这些请求,最终将处理的结果返回给 apache。在 apache 的配置文件中配置好了 php 模块,php 模块就会通过注册 apache2 的 ap_hook_post_config 挂钩,实现请求与返回。

windows 下:

LoadModule php5_module d:/server/php/php5apache2_2.dll
1
linux 下:

LoadModule php5_module modules/mod_php5.so
1
 该模块是 apache 在CGI的基础上进行的一种扩展,加快PHP的运行效率

CLI
php-CLI:PHP Command Line Interface

即 php 在命令行运行的接口,当然是相对于以上三种方式(web 请求)来说的

优点:

多进程池,子进程完成后,内核会回收掉
主进程只进行任务分发
CLI 模式在 windows 和 linux 都可以运行。

以上就是 php 的几种主要的运行方式,除此之外,还有一种运行方式是 ISAPI(Internet Server Application Program Interface)是微软提供的一套面向Internet服务的API接口,在这里就不多介绍了。因为现在几乎都是在 Linux 下部署 php 应用了。
---------------------

php 的几种运行方式相关推荐

  1. Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)

    PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...

  2. python的编程模式有哪两种_python程序的两种运行方式是什么

    python程序的两种运行方式是什么 第一种方式:REPL 所谓REPL即read.eva.print.loop(读取.计算.打印.循环),实现REPL运行方式有以下两种: 1.IDLE( 集成开发环 ...

  3. python idle 常规命令_Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现

    1 命令行窗口 开始栏搜索command,打开命令提示符,即为命令行窗口. 运行一个Python程序,需要输入:Python + 程序地址 + 程序名.py 如图: 2 Python解释器 开始栏搜索 ...

  4. python的运行方式有哪两种 有何区别_python程序的两种运行方式是什么

    python程序的两种运行方式是什么 第一种方式:REPL 所谓REPL即read.eva.print.loop(读取.计算.打印.循环),实现REPL运行方式有以下两种: 1.IDLE( 集成开发环 ...

  5. springboot项目有哪几种运行方式

    springboot项目有哪几种运行方式 打包用命令或者放到容器中运行 用 Maven/Gradle 插件运行 直接执行 main 方法运行

  6. PHP-FPM及其三种运行方式

    PHP-FPM及其三种运行方式 php-fpm和FastCGI是什么? fpm的基本实现 worker工作流程 fpm启动流程部分源码 php-fpm运行的三种模式 `static`模式:静态模式 ` ...

  7. java的两种运行方式Applet和Application你真的懂吗

    对两者的简介 他们是java的两种程序,能够独立运行的程序称为Java应用程序也包含我们正常写的java文件所生成的可执行程序(Application)其运行和普通的java文件相同.Java语言还有 ...

  8. 097实战 关于ETL的几种运行方式

    一:代码部分 1.新建maven项目 2.添加需要的java代码 3.书写mapper类 4.书写runner类 二:运行方式 1.本地运行 2.集群运行 3.本地提交集群运行 三:本地运行方式 1. ...

  9. fastapi的两种运行方式

    方式一 1.运行main1.py代码 2.在终端输入 uvicorn main1:app --reload 3.在浏览器网页输入对应网址 main1.py from fastapi import Fa ...

最新文章

  1. RabbitMQ 学习
  2. 朋友圈爆款背后的计算机视觉技术与应用(附视频)
  3. scipy.sparse.coo_matrix、csr_matrix、lil_matrix、dia_matrix
  4. matlab i型级联filter,Matlab中filter,conv,impz用法(最新整理)
  5. rabbitmq 限制速度_技术干货分享:RabbitMQ消息积压的几种解决思路
  6. outlook邮箱邮件大小限制_配置邮箱的邮件大小限制: Exchange 2013 帮助 | Microsoft Docs...
  7. Java this关键字
  8. Python3只出现一次数字
  9. 头条自己提问的问题在哪看_在头条的这三十天
  10. Linux(CentOS6.5)下编译安装Nginx1.10.1
  11. QML工作笔记-文本输入设置长度以及回显方式(TextInput与TextField通用)
  12. Java基础(五)——泛型
  13. 上位机和下位机通信故障判断方法
  14. 网易校招linux面试题,网易校招真题——下厨房
  15. 15个经典面试问题及回答思路,知乎上转疯了!
  16. Unity 网格合并MeshBaker(一)
  17. 定时任务:每隔30分钟执行一次脚本
  18. flutter打包出错了,有大神帮忙看看吗?
  19. 群英传内推第001期
  20. CentOS7.2下一键安装Openstack

热门文章

  1. Matlab之选取特定区域的坐标点
  2. 高效开发,项目中是否有聚合服务接口
  3. SELECT... FOR UPDATE 排他锁
  4. Cycript基本语法与使用-iOS逆向工程
  5. “迷信”或是超前科学:朱清时谈量子
  6. 扫描IP软件,无线AP忘记IP地址
  7. Android Manifest
  8. 打印机共享后每天要重新连接
  9. Python笔记(七):内置模块
  10. vjudge_contest15