http服务(五)――php在apache中的运行方式
2015-06-06 10:36
501 查看
php在apache下一般有三种工作方式:CGI,Apache模块,FastCGI
在CGI模式下,如果用户请求一个php文件,web服务器就会调用php解析器去解析这个文件,然后把结果返回给客户端。
在apache模块模式下,将php解析器作为了apache的一个模块,这样php解析器就与web服务器一起运行。
在fastcgi模式下,web服务器不会像cgi那样每次都启动一个新的进程,而是将内容传递到一个已有的进程中(这个进程在web服务器启动时就开启了,而且不会退出),这个进程就会一次次的处理来自客户端的请求。
1. CGI模式与模块模式比较:
这两种工作方式的区别:
在CGI模式下,如果客户机请求一个php文件,Web服务器就调用php解析器去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。
所以从某种角度上来说,以apache模块方式安装的PHP有着比CGI模式更好的安全性以及更好的执行效率和速度。
2. FastCGI运行模式分析:
FastCGI的工作原理是:
(1)、apache启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】。
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
参考资料:
http://fifiole.blog.163.com/blog/static/169459225201222962651804/
http://blog.csdn.net/ajaxuser/article/details/5892630
在CGI模式下,如果用户请求一个php文件,web服务器就会调用php解析器去解析这个文件,然后把结果返回给客户端。
在apache模块模式下,将php解析器作为了apache的一个模块,这样php解析器就与web服务器一起运行。
在fastcgi模式下,web服务器不会像cgi那样每次都启动一个新的进程,而是将内容传递到一个已有的进程中(这个进程在web服务器启动时就开启了,而且不会退出),这个进程就会一次次的处理来自客户端的请求。
1. CGI模式与模块模式比较:
这两种工作方式的区别:
在CGI模式下,如果客户机请求一个php文件,Web服务器就调用php解析器去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。
所以从某种角度上来说,以apache模块方式安装的PHP有着比CGI模式更好的安全性以及更好的执行效率和速度。
2. FastCGI运行模式分析:
FastCGI的工作原理是:
(1)、apache启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】。
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
参考资料:
http://fifiole.blog.163.com/blog/static/169459225201222962651804/
http://blog.csdn.net/ajaxuser/article/details/5892630
相关文章推荐
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447
- Android25图灵聊天项目------HttpURLConnection请求get文本数据
- 计算机网络概述
- 生产网络架构改造遇到问题综述
- 伪造成长计划之二
- 在android用Get方式发送http请求
- 学习笔记:MFC实现http协议传输图片和文本
- linux centos 安装httpd-2.4.12
- TCP/UDP使用总结
- CetnOS minimal 网络不可用
- 微商才是世界上最花心的“男人”
- Android下网络请求的两个封装类
- ASP.NET HttpModule URL 重写 (一) 【Z】
- 计算机网络学习(6)
- 计算机网络的协议是什么
- [Servlet]深入研究HttpServlet
- [Servlet]深入研究HttpServlet
- Facebook网络模拟测试工具ATC使用
- [Servlet]Servlet的生命周期