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 相关文章推荐
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
apache rewrite_module模块使用教程
2008/01/10 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
js jquery做的图片连续滚动代码
2008/01/06 Javascript
图片自动缩小 点击放大
2008/07/07 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python内存管理分析
2015/04/08 Python
深入理解Python对Json的解析
2017/02/14 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Python如何发送与接收大型数组
2020/08/07 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
幼师求职自荐信范文
2014/01/26 职场文书
致200米运动员广播稿
2014/02/06 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers