php中mod_php模式和mod_fastcgi模式


php中mod_php模式和mod_fastcgi模式


1 mod_php模式 (apache 中使用)

mod_php 模式会将php模块安装到apache下面来运行,2者结合度较大。出问题时很难定位是php的问题还是apache的问题。

常见的web服务器

apache
nginx
IIS
lighttpd
tomcat

mod_php模式下,apache调用php执行的过程如下:

apache -> httpd -> php5_module -> sapi -> php

apache + php + mysql 的 完整的访问流程

apache 用 LoadModule 来加载 php5_module ( mod_php模式 )

把php作为apache的一个子模块来运行。当通过web访问php文件时,apache就会调用php5_module来解析php代码
         //加入以下2句
        LoadModule php5_module D:/php/php5apache2_2.dll
        AddType application/x-httpd-php .php
        
        
        //将下面的
        <IfModule dir_module>
            DirectoryIndex index.html
        </IfModule>
        //将其修改为:
        <IfModule dir_module>
            DirectoryIndex index.html index.htm index.php index.phtml
        </IfModule>

sapi 是一个中间过程,SAPI提供了一个和外部通信的接口,有点类似于socket,使得PHP可以和其他应用进行交互数据(apache,nginx,cli等)。

php默认提供了很多种SAPI,常见的给apache和nginx的php5_module,CGI,给IIS的ISAPI,还有Shell的CLI。  


2 mod_fastcgi模式

mod_fastcgi模式则是作为一个中间过程,apache接收用户请求后,就发送给fastcgi, 再连接php来完成访问。

php的sapi的另一种方式就是提供 cgi模式

cgi就是专门用来和web 服务器打交道的。web服务器收到用户请求,就会把请求提交给cgi程序(php的fastcgi), cgi的好处就是完全独立于任何服务器,仅仅是做为中间分子。提供接口给apache和php

每一次web请求都会有启动和退出过程,--为人诟病的fork-and-execute模式,

由于cgi比较老所以就出现了fastcgi来取代  启动多个cgi模块,在那里一直运行着等着,等着web发过来的请求,
然后再给php解析运算完成生成html给web后,也不会退出,而且继续等着下一个web请求


3 PHP-FPM 模式 (Nginx中使用 )

PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了

PHP专用的 fastcgi管理器, 来辅助mode_fastcgi模式 地址

php-fpm安装

要想使php支持php-fpm,只需要在编译的时候带上 --enable-fpm 就可以了。
 

获取之前的编译参数

    php  -i  | grep 'Configure' 
    
    php -i | grep "Configure" | 'fpm'  查看是否有 fpm
    
没有的话  需要重新编译  

启动 php-fpm

    /usr/local/php/sbin/php-fpm
    
    -->>   /usr/local/php/etc目录下将php-fpm.conf.default拷贝也一份成php-fpm.conf

查看启动的状态 ;

    ps -ef | grep php-fpm
Buy me a 肥仔水!