php的4种常见运行方式


Posted in PHP onMarch 20, 2015

SAPI:Server Application Programming Interface服务端应用编程端口。他就是php与其他应用交互的接口,php脚本要执行有很多中方式,通过web服务器,或者直接在命令行行下,也可以嵌入其他程序中。SAPI提供了一个和外部通信的接口,常见的SAPI有:cgi、fast-cgi、cli、Apache模块的dll等。

1、CGI

CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。

2、FastCGI

fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)。FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web 请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。

3、APACHE2HANDLER
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

4、CLI

cli是php的命令行运行模式,大家经常会使用它,但是可能并没有注意到(例如:我们在linux下经常使用 “php -m”查找PHP安装了那些扩展就是PHP命令行运行模式;

PHP 相关文章推荐
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
php 购物车完整实现代码
Jun 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 #PHP
PHP连接MySQL数据的操作要点
Mar 20 #PHP
php提交表单发送邮件的方法
Mar 20 #PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 #PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 #PHP
php校验表单检测字段是否为空的方法
Mar 20 #PHP
php获取从html表单传递数组的方法
Mar 20 #PHP
You might like
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
vue实现购物车小案例
2019/09/27 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
Python探索之SocketServer详解
2017/10/28 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
施工人员岗位职责
2013/12/12 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
幼儿教师求职信
2014/05/24 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
2015年环卫工作总结
2015/04/28 职场文书
缅怀先烈主题班会
2015/08/14 职场文书