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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
PHP爆绝对路径方法收集整理
Sep 17 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
9个比较实用的php代码片段
Mar 15 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
php查询内存信息操作示例
May 09 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 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实现用户认证及管理完全源码
2007/03/11 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP 万年历实现代码
2012/10/18 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
移动端js图片查看器
2016/11/17 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
python中的全局变量用法分析
2015/06/09 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
Python 3 判断2个字典相同
2019/08/06 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
教师个人的自我评价分享
2014/01/02 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
入党积极分子评语
2014/05/04 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
成本会计实训报告
2014/11/05 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
学校党员干部承诺书
2015/05/04 职场文书