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新手上路(五)
Oct 09 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP获取文件行数的方法
Jun 10 PHP
php常用表单验证类用法实例
Jun 18 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
php对微信支付回调处理的方法
Aug 23 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python之reload流程实例代码解析
2018/01/29 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
公司承诺书范文
2014/05/19 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
教研活动主持词
2015/07/03 职场文书
中学校园广播稿
2015/08/18 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript