PHP运行模式

PHP 代码是如何运行的,PHP常见的运行模式主要有以下几种

CLI

CLI(Command Line Interface,命令行接口)模式指的就是在命令行运行 PHP 脚本,一般用来写独立运行的脚本程序或者需要常驻内存的服务。

Apache Module

Module 模式使用 mod_php 在 web 服务器上执行 PHP 脚本代码。当使用 mod_php 时,PHP 解释器将会嵌入到 Apache fork 的每个进程中,这样每个 Apache work 进程都可以处理 PHP 脚本程序,而不用依赖任何外部程序。也可以理解为 Apache Module 把 PHP 脚本当做 Apache 服务扩展的一部分与 Apache 绑定一起使用。
缺陷:
由于 PHP 解释器嵌入每个 Apache work 进程中,即使是处理静态资源(静态文件或图片)时,进程中依然包含 PHP 解释器。
PHP 代码执行与 web 服务器耦合在一起,对安全和扩展不友好。
优势:
PHP 解释器跟随 Apache 一起启动,不用每次执行 PHP 脚本都需要 fork 进程和加载资源,速度较快。

CGI

CGI(Common Gateway Interface,通用网关接口)是 web 服务器与应用程序之间的通信协议,用于 web 服务器(Nginx、Apache)与应用程序(PHP、Java)之间数据的传输。使用 CGI 模式的运行,当 web 服务在遇到 PHP 脚本的时候会将 PHP 程序提交给实现了 CGI 协议的应用程序(php-cgi.exe)解释,并将解释后的结果返回给 web 服务器。CGI 的应用主要在网站早期,由于其性能的缺陷现在已经很少使用了。
缺陷:
每有一个用户请求,都要先创建 CGI 的子进程,然后处理请求,处理完之后再结束该子进程,这就是 Fork-And-Execute 模式。当用户数量大时,就会创建大量的子进程,从而造成资源的浪费。而且每次 Fork 子进程时都需要加载 PHP 配置信息和初始化程序,反复执行重复的操作,这也是 CGI 性能低下的主要原因之一。
优势:
相比于 Apache Module 模式,CGI 将应用从 web 服务器中分离出来单独运行,而 Apache Module 模式将PHP作为 web 服务器的模块运行。这样程序的安全性、扩展性和代码结构的清晰性都有了很大提高。

FastCGI

FastCGI 模式是 CGI 模式的升级版。它结合了 Apache Module 模式和 CGI 模式的优势,也是现在使用最广泛的 PHP 运行模式。FastCGI 是一个常驻(long-live)型的 CGI,服务传入请求时,网络服务器通过Unix域套接字、命名管道或传输控制协议(TCP)连接向 FastCGI 进程发送环境变量信息和页面请求。响应通过相同的连接从进程返回到网络服务器,然后网络服务器将该响应传递给最终用户。连接可能在响应结束时关闭,但是web服务器和FastCGI服务进程都将持续,不会被销毁。每个单独的 FastCGI 进程在其生命周期内可以处理许多请求,从而避免了每个请求进程创建和终止的开销。php-fpm 就是 FastCGI 的实现。

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!