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_Flame(Version:Progress)的原代码
Oct 09 PHP
PHP4实际应用经验篇(8)
Oct 09 PHP
PHP HTML代码串截取代码
Dec 29 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
python 切换root 执行命令的方法
2019/01/19 Python
使用python+whoosh实现全文检索
2019/12/09 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
小区停车场管理制度
2014/01/27 职场文书
公司合作意向书
2014/04/01 职场文书
单位委托书怎么写
2014/09/21 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
MySQL学习之基础命令实操总结
2022/03/19 MySQL