(一)我们知道像apache这些web服务器是不能直接解析php程序,那么我们在网页在输入的php程序是如何解析的啦?
是通过SAPI: Server abstraction API 它提供了一个接口,使得PHP可以和其他应用进行交互数据。
php 提供多种sapi
1.给apache、nginx 这种web服务器使用的 php_module .cgi
2.给shell 提供的cli
(cli 即php命令行模式)
(二)mod_php模式
把php模块安装到apache中,每个请求都会产生一个新的进程。
apache->httpd->php_module->sapi->php
我们在apache的配置文件httpd.conf中加上或者修改这样几句:
//加入以下2句LoadModule php5_module D:/php/php5apache2_2.dllAddType application/x-httpd-php .php//将下面的 DirectoryIndex index.html//将其修改为: DirectoryIndex index.html index.htm index.php index.phtml
上面的windows下安装php和apache环境后的手动配置,在linux下源码安装大致是这样配置的:
./configure –with-mysql=/usr/local –with-apache=/usr/local/apache –enable-track-vars
所以,这种方式,他们的共同本质都是用LoadModule来加载php5_module,就是把php作为apache的一个子模块来运行。当通过web访问php文件时,apache就会调用php5_module来解析php代码。
这就是mod_php模式
(三)mod_fastcgi 模式
cgi 是外部程序与web服务器的接口标准,是在cgi程序和web服务器之间传递信息的规程。
cgi工作原理:web服务器收到用户请求,把请求提交给cgi程序,cgi程序根据请求提交参数做出处理,把结果返回给web服务器
fastcgi:传统的cgi每次web请求都有启动和退出,而fastcgi是启动多个cgi模块,一直运行,web请求过来了,可以直接处理,处理完也不会退出。
图形表示一下 mod_php模式和mod_fastcgi 模式
mod_php模式
mod_fastcgi模式
(四)php-cgi php实现的自带fastcgi的管理器
php-fpm php-cgi的管理程序,是对于php-cgi的改进
请求静态页面
php_fpm模式
php_cgi模式
图片取至:
https://blog.csdn.net/belen_xue/article/details/65950658