php有三种工作模式
php有三种工作模式. 其中是最常见的是php作为一个模块工作在一个多进程的webserver中, 例如apache webserver. apache会启动一个主进程, 多个子进程(php). 主进程分发请求到子进程上处理. 目前流行的nginx + php-fpm应该也是类似这一种模式, ngnix会把请求转发给php-fpm处理. php-fpm是一个php进程管理器, 维护了一个php进程池, 在接收到请求后分发给php子进程.
在这种模式下, php进程可以是一直存活的. 进程启动时会做进程相关的初始化操作, 比如加载插件. 对于接收到的请求, 会做请求处理的相关初始化->调用相应的php代码做业务操作->销毁请求上下文. 对于php程序员来讲, 每个请求的处理都是全新的上下文, 所有定义/对象/变量完全限定在单个请求处理的这个上下文中. 大家写的php代码到此结束. 当然, php进程也可以被销毁, 这与php-fpm的工作模式有关. 更多细节详见相关文档1+2.
因此, 对于一个这样的php进程, 是可以做持久化数据库连接的, 只是稍有不同. 每个php进程只保留一个持久连接. 例如, php-fpm启动了20个php子进程, 对于同一个数据库和同一个用户名, 最多有20个持久连接. 对于同一个php进程所处理的多个请求, 它们都使用同一个数据库连接. 更多详见文档3.
所以, 这个效果与使用一个连接池也差不多了. 持久连接数取决与php进程的数量. 最终, 持久连接数量/进程数量就需要按实际的情况来调优了.
目前理解是这样, 如有误请指正.
相关文档:
1. php生命周期 http://www.slideshare.net/laruence/the-php-life-cycle
2. php-fpm配置文档: http://php.net/manual/en/install.fpm.configuration.php
3. php持久化连接: http://php.net/manual/en/features.persistent-connections.php
//-----------------------------------------------------------
http://www.jb51.net/article/38329.htm
PHP运行目前为止主要有三种方式:
a、以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache服务器,以同一个进程运行。
b、以CGI的方式运行,CGI英文叫做公共网关接口,就是Apache在遇到PHP脚本的时候会将PHP程序提交给CGI应用程序(php-cgi.exe)解释,解释之后的结果返回给Apache,然后再相应请求的用户。
c、以FastCGI的方式运行。这种形式是CGI的加强版本,CGI是单进程,多线程的运行方式,程序执行完成之后就会销毁,所以每次都需要加载配置和环境变量fork-and-execute(创建-执行)。而FastCGI则不同,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次。FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。下面我就分边配置这三种运行方式:
1、无论上述哪种方式运行下面的配置通常都会加上,解压PHP安装包到c:/PHP5/,重命名PHP.ini-recommend文件为PHP.ini,分别寻找如下字段编辑,去除前面的分号(注意不要去错分号,好多是注释信息,仔细辨认)。
display_errors = On //显示错误 line 373
extension_dir = "C:/php5/ext" //php的扩展选项文件所在的目录 line 542
date.timezone = Asia/shanhai //时区配置 line 716
2、以模块的方式运行,在Apache(C:/Program Files/Apache Software Foundation/Apache2.2/conf)的配置文件里添加如下配置
PHPinidir "C:/php5/php.ini"
//修改配置
DirectoryIndex index.html index.php//追加index.php
AddType application/x-httpd-php .php //line 408左右添加
接着我们在apache的根目录下面,默认C:/Program Files/Apache Software Foundation/Apache2.2/htdocs新建php文件index.php,编辑添加如下代码:
phpinfo();
?>
然后我们在地址栏输入http://localhost/会出现如下界面:注意红色部分和配置的关系
3、cgi的方式运行,需要做如下的配置首先php配置文件
修改apache的配置,去掉原来的模块配置
LoadModule php5_module "C:/php5/php5apache2_2.dll"
PHPinidir "C:/php5/php.ini"
=>加入以下配置
然后我们在目录C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin新建一个cgi文件test.cgi编写如下代码:
<?
php php phpinfo();
?>
如果同时打开多个则会有很多php-cgi.exe,并且在执行完成之后消失:
4、PHP的fastcig方式运行,首先需要去下载fastcgi模块,默认是没有带这个模块的,而cgi是自带的;下载地址http://httpd.apache.org/mod_fcgid/;解压复制其中的mod_fcgid.so和mod_fcgid.pdb,接下来做如下的配置:
FcgidInitialEnv PHPRC "c:/php5" //php配置文件 line 129追加
AddHandler fcgid-script .php //添加句柄 即后缀 什么样的文件需要fastcgi解释 line 407追加
FcgidWrapper "c:/php5/php-cgi.exe" .php //解释器路径 line 408
Options Indexes FollowSymLinks ExecCGI //line 221 追加 ExecCGI 意思是目录允许执行CGI脚本
是否成功安装,只需要做个PHP文件检查就可以了,我们就用上面的index.php文件:
终于把PHP的运行方式讲完了,初学者一定要亲自试验一下,这篇教程具有一定的难度,要反复思考才能理解其中的意思,涉及到一些专业知识,当然你暂时可以直接使用模块运行方式,等自己对PHP有了一定的理解之后可以再回头看看这篇文章,今天我花了几个小时的时间整理PHP的运行方式,由于作者本人的水平有限,错误之处在所难免!
php有三种工作模式的更多相关文章
- 转载-LVS的三种工作模式
来源地址:http://www.uml.org.cn/zjjs/201211124.asp 1.lvs简介 lvs是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立 ...
- Tomcat的工作模式和运行模式
(1)工作模式 Tomcat作为servlet容器,有三种工作模式: 1.独立的servlet容器,servlet容器是web服务器的一部分: 2.进程内的servlet容器,servlet容器是作为 ...
- Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全
Vi简介 Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序. Vi不是排版程序,只是一个纯粹的文本编辑程序. Vi是全屏幕文本编辑器,它没有菜单,只有命令. Vi不是基于窗口的,所以, ...
- ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266.但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP826 ...
- k8s的两种网络方案与多种工作模式[flannel与calico]
k8s的两种网络方案与多种工作模式 1. Flannel: flannel有三种工作模式: 1. vxlan(隧道方案) 2. host-gw(路由方案) 2. udp(在用户态实现的数据封装解封装, ...
- Tomcat内部结构、工作原理、工作模式和运行模式
TOMCAT的内部结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中.Tomcat的 ...
- php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因 ...
- GVRP 的工作机制和工作模式
GVRP 简介 GVRP 基于 GARP 的工作机制来维护设备中的 VLAN 动态注册信息,并将该信息向其他设备传播:当设备启动了 GVRP 之后,就能够接收来自其他设备的 VLAN 注册信息,并动态 ...
- SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
随机推荐
- bzoj 1228 [SDOI2009]E&D(sg函数,找规律)
Description 小E 与小W 进行一项名为“E&D”游戏.游戏的规则如下:桌子上有2n 堆石子,编号为1..2n.其中,为了方便起见,我们将第2k-1 堆与第2k 堆(1 ≤ k ≤ ...
- 一个free的问题
请看下面的代码: #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sy ...
- algorithm@ Matrix fast power
一. 什么是快速幂: 快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高.一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次 ...
- SpringTest 使用说明 -构建无污染纯绿色事务测试框架 (记录用)
@ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/app ...
- JavaScript- The Good Parts CHAPTER 2
I know it well:I read it in the grammar long ago.—William Shakespeare, The Tragedy(悲剧:灾难:惨案) of Titu ...
- (贪心5.1.2)POJ 2287 Tian Ji -- The Horse Racing
/* * POJ_2287.cpp * * Created on: 2013年10月9日 * Author: Administrator */ #include <iostream> #i ...
- jQuery获取鼠标移动方向2
(function($) { $.fn.extend({ show: function(div) { var w = this.width(), h = this.height(), xpos = w ...
- 立体视觉-opencv中立体匹配相关代码
三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...
- maven 通过nexus创建工厂的配置
访问中央工厂的地址:http://localhost:8081/nexus/index.html#welcome admin.admin123 查找到自己配置的maven仓库的位置,编辑setti ...
- iOS 使用CLGeocoder获取地理位置
placemark(MKPlacemark类的对象)其实是geocoder(MKReverseGeocoder类的对象)的一个属性.从geocoder里面取placemark这个和直接取placema ...