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生成缩略图的函数代码(修改版)
Jan 18 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
php的大小写敏感问题整理
Dec 29 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
php中socket通信机制实例详解
Jan 03 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
详解php中serialize()和unserialize()函数
Jul 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字符串的编码问题的详细介绍
2013/04/27 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php实用代码片段整理
2016/11/12 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
jQuery插件jsonview展示json数据
2018/05/26 jQuery
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
python爬虫基础知识点整理
2020/06/02 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
质检员的岗位职责
2013/11/15 职场文书
画展邀请函
2015/01/31 职场文书
小浪底导游词
2015/02/12 职场文书
检讨书格式
2015/05/07 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技