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读写文件的方法(生成HTML)
Nov 27 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
php 在线打包_支持子目录
Jun 28 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
Jun 08 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
May 04 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 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
用户的详细注册和判断
2006/10/09 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP实现微信发红包程序
2015/08/24 PHP
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
在Python中使用模块的教程
2015/04/27 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Python魔法方法功能与用法简介
2019/04/04 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
《胖乎乎的小手》教学反思
2014/02/26 职场文书
园林技术专业求职信
2014/07/28 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
财务部会计岗位职责
2015/02/03 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
工商行政处罚决定书
2015/06/24 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android