Window下PHP三种运行方式图文详解


Posted in PHP onJune 11, 2013

PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式。

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,分别寻找如下字段编辑,去除前面的分号(注意不要去错分号,好多是注释信息,仔细辨认)。

error_reporting = E_ALL //开启报错,便于程序员查错 line 342 
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)的配置文件里添加如下配置

LoadModule php5_module "C:/php5/php5apache2_2.dll" //大约line 127 
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,编辑添加如下代码:

<?php 
phpinfo(); 
?>

然后我们在地址栏输入http://localhost/会出现如下界面:注意红色部分和配置的关系

Window下PHP三种运行方式图文详解

3、cgi的方式运行,需要做如下的配置首先php配置文件
cgi.force_redirect = 0 //本来是 1 并且去掉注释符号;

修改apache的配置,去掉原来的模块配置

AddType application/x-httpd-php .php 
LoadModule php5_module "C:/php5/php5apache2_2.dll" 
PHPinidir "C:/php5/php.ini"

=>加入以下配置

AddHandler cgi-script .cgi // line 396

然后我们在目录C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin新建一个cgi文件test.cgi编写如下代码:

#!c:/php5/php-cgi.exe 
<? 
php php phpinfo(); 
?>

Window下PHP三种运行方式图文详解

 

如果同时打开多个则会有很多php-cgi.exe,并且在执行完成之后消失:

Window下PHP三种运行方式图文详解

4、PHP的fastcig方式运行,首先需要去下载fastcgi模块,默认是没有带这个模块的,而cgi是自带的;下载地址http://httpd.apache.org/mod_fcgid/;解压复制其中的mod_fcgid.so和mod_fcgid.pdb,接下来做如下的配置:
LoadModule fcgid_module modules/mod_fcgid.so // line 128追加 
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文件:

Window下PHP三种运行方式图文详解

Window下PHP三种运行方式图文详解

终于把PHP的运行方式讲完了,初学者一定要亲自试验一下,这篇教程具有一定的难度,要反复思考才能理解其中的意思,涉及到一些专业知识,当然你暂时可以直接使用模块运行方式,等自己对PHP有了一定的理解之后可以再回头看看这篇文章,今天我花了几个小时的时间整理PHP的运行方式,由于作者本人的水平有限,错误之处在所难免!
PHP 相关文章推荐
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php mail to 配置详解
Jan 16 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
php使用crypt()函数进行加密
Jun 08 PHP
laravel Model 执行事务的实现
Oct 10 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
php访问对象中的成员的实例方法
Nov 17 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 #PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 #PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 #PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 #PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 #PHP
php防注入,表单提交值转义的实现详解
Jun 10 #PHP
PHP获取当前页面完整URL的实现代码
Jun 10 #PHP
You might like
在普通HTTP上安全地传输密码
2007/07/21 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
如何运行带参数的python脚本
2019/11/15 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
幼儿园中班新学期寄语
2014/01/18 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
岗位职责说明书
2014/05/07 职场文书
总账会计岗位职责
2015/04/02 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python