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 相关文章推荐
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
php解析url的三个示例
Jan 20 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP实现简单计算器小程序
Aug 28 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
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
图解js图片轮播效果
2015/12/20 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
python中pycurl库的用法实例
2014/09/30 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
python实现磁盘日志清理的示例
2020/11/05 Python
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
Java实现注册登录跳转
2022/06/16 Java/Android