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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
php内存缓存实现方法
Jan 24 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
PHP中的替代语法简介
2014/08/22 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
python执行get提交的方法
2015/04/29 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python threading的使用方法解析
2019/08/28 Python
python程序需要编译吗
2020/06/19 Python
python 实现Harris角点检测算法
2020/12/11 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
联想中国官方商城:Lenovo China
2017/10/18 全球购物
计算机求职自荐信范文
2014/04/19 职场文书
幼儿生日活动方案
2014/08/27 职场文书
防火标语大全
2014/10/06 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python