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 相关文章推荐
php中取得文件的后缀名?
Feb 20 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
浅谈PHP的反射API
Feb 26 PHP
thinkphp分页集成实例
Jul 24 PHP
浅析PHP7的多进程及实例源码
Apr 14 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 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优化那些事(经验分享)
2014/11/27 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python读取word文本操作详解
2018/01/22 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
高中毕业生的个人自我评价
2014/02/21 职场文书
2014年度党员自我评议
2014/09/13 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2014年文秘工作总结
2014/11/25 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
基于PyQt5制作一个群发邮件工具
2022/04/08 Python