PHP运行模式

一、php5大运行模式

1)CGI(通用网关接口/ Common Gateway Interface)

2)FastCGI(常驻型CGI / Long-Live CGI)

3)CLI(命令行运行 / Command Line Interface)

4)Web模块模式(即mod_php,Apache等Web服务器运行的模式)

5)ISAPI(Internet Server Application Program Interface)

备注:在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。

接下来我们主要讨论FastCGI和mod_php这两种模式

二、mod_php

首先,来看一下以Apache模块方式运行PHP。mod_php现在在Linux各版本的软件仓库里都有,因此很容易被安装。

当PHP以模块的方式运行在Apache中时,PHP解释器被“内嵌”在Apache的进程里。Apache不会调用任何外部的PHP进程,因此这种方式使Apache与PHP能更好的通信。但是,当以这种方式运行PHP的时候,哪怕Apache提供的仅仅是静态的资源(如HTML),Apache的每个子进程都会载入 mod_php,导致了比正常情况下更多的内存开销。

以这种方式运行的另一个缺点是,它仅能与Apache一起配合工作。另外,在小型的VPS和大型的网站中,这种方式也不合适,因为大型网站可能有很多静态资源,而这些静态资源是不需要PHP程序解释的。

优缺点

优点:

  • 1.易于安装和更新
  • 2.容配置
  • 3.如果处理图片等操作比较耗时,还是要用mod_php这种方式,开启一个进程处理。否则,有限的php-fpm进程会被耗时的操作阻塞

缺点:

  • 1.仅能与Apache一起工作
  • 2.增加了Apache子进程内存开销
  • 3.当更改php.ini文件后,需要重启Apache

三、FastCGI

php-fpm是fastcgi的进程管理器

工作原理

1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi)并等待来自Web Server的连接。

3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

优缺点

优点:

  • 1.兼容多数Web服务器,Apache,nginx,iis等都支持fast-cgi
  • 2.比mod_php占内存小,可以同时设置多个版本的PHP
  • 3.更多的配置项,包括多版本PHP和suexec

缺点

  • 1.配置复杂
  • 2.不被大家所熟知
  • 3.你对PHP环境做的任何升级(如php.ini文件的改变)都有几分钟的延迟。这是因为为了更快的速度 你的php.ini文件已经被载入内存,而不是每次需要时再从存储器重新读取
  • 4.一个FastCGI进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦

四、总结

综上所述,mod_php和fast_cgi运行效率方面没有太大的区别。在使用apache时,选择使用最广的mod_php模式即可,因为高并发时,apache的瓶颈不在mod_php,而是apache的阻塞,多进程对内存造成的开销。

现在php项目基本都要大量使用rewrite,综合考量下,小的项目使用apache完全能满足需求。项目较大时,可以使用lnamp架构,用nginx访问静态资源,动态php请求使用ngnix反向代理apache服务器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值