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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
PHP中基本符号及使用方法
Mar 23 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
php操作redis缓存方法分享
Jun 03 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
Laravel框架控制器的request与response用法示例
Sep 30 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP Cookie学习笔记
2016/08/23 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
Foreo国际站:Foreo International
2018/10/29 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
要账委托书范本
2014/09/15 职场文书
春季运动会开幕词
2015/01/28 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
发票退票证明
2015/06/24 职场文书