在Windows中安装Apache2和PHP4的权威指南


Posted in PHP onOctober 09, 2006

Apache 2和PHP是创建交互式网站的流行方案,而且成本很低。在Windows中安装Apache 2是一件轻而易举的事情,但要使PHP 4与Apache 2配合无间地运行,就需要一定的技巧。

转自:动态网制作指南 www.knowsky.com

在PHP 4.3手册的Windows安装小节,没有解释如何让PHP与Apache 2配合使用,而有关Apache 2安装的小节缺失了你需要的大量信息。在网上公布的其他安装指南中,也包含了不少错误,使一些安装人员只好不断试验和犯错。例如,有些人甚至将PHP的DLL替换成其他PHP版本的DLL。OK,为了节省你的宝贵时间,我们准备了这篇最权威的指南文章,帮你扫除一切烦恼。

 

使用正确版本的Windows

首先要说一说兼容性:Apache 2不能在Windows 95上运行;在Windows 98上勉强能够运行,但不能作为服务使用。从4.3版本开始,PHP也不再支持Windows 95。所以,你的Windows操作系统必须是Windows NT、2000或者XP。

Apache 2:源码还是二进制?
如果你有Visual C++ 5.0或更高的版本,或者安装了Microsoft Visual Studio,那么虽然可以根据源码来生成Apache,但请绝对不要这样做。在Visual Studio IDE中,Windows下的生成过程非常复杂。即使从命令行编译,也绝对不是一件易事。所以,除非你喜欢创建makefile,否则最好获得一份Windows Installer二进制发行包,也就是一个.msi文件。等你对Apache有了足够多的认识,知道自己要进行哪些定制操作时,才可考虑亲手生成(编译)Apache。

如果已经安装好并正在运行老版本的Apache,首先要停止它,卸载它,然后才能开始安装新服务器。多个版本的Apache 2不能共存。

双击Apache 2 .msi文件。同意许可协议后,会出现如图A所示的对话框。

图A

在Windows中安装Apache2和PHP4的权威指南

转自:动态网制作指南 www.knowsky.com

正确地设置Network Domain和Server Name(如果不打算将Apache安装到远程计算机,那么设置localhost就可以了),在Administrator's Email Address区域输入你的电子邮件地址,保持端口80/服务选项单选钮的选中状态。在下一个对话框中如果选择Typical安装,可以快速地获得一个能实际工作的服务器环境。


安装提示
建议将默认安装目录从C:\Program Files\Apache Group变成C:\Apache或者符合8.3文件名格式的其他名称。这样一来,以后每次输入Apache安装路径时,都不必为其添加引号。


稍候片刻,安装向导会告诉你Apache 2安装成功。接下来惟一要做的事情就是进行测试,请打开浏览器并访问localhost,这样应该看到默认的Apache 2主页。

然后可以删除主Web服务器目录中的所有示例文件,它们默认位于C:\InstallDirectory\Apache\Apache2\htdocs中。如果有一个现成的主页Index.html,请把它拷贝到这里;另外,也可以马上创建一个空白主页。对于未初始化的HTML,以下代码就可以了:

转自:动态网制作指南 www.knowsky.comcolor=#0066ff><html>
<head>title=default server page</head>
<body>Default server page</body>
</html>

让Apache 2为PHP做好准备

从现在开始,你需要较多地以人工方式进行安装,不能简单地点击和选择几个选项了事。尽快习惯它吧,这才是Apache的方式。你需要编辑文件来设置不同的配置选项;如果操作不当,你所做的修改就会妨碍Apache的正确加载。如果设置引发错误,那么错误可能被记录到Apache 2错误日志中(默认为C:\InstallDir\Apache2\Logs\Error.log)。但能够像这样进行记录的毕竟是少数,大多数错误只会记录到Windows事件日志中(开始| 设置| 控制面板|  管理工具| 事件查看器)。

令人遗憾的是,在你对安装设置进行调试时,Windows事件日志并不是一个方便的工具。更好的做法是在命令行窗口中测试Apache服务器的加载,这样能立即看到错误报告。所以,在完成了我即将讨论的配置修改后,请打开一个命令行窗口,切换到Apache的binary目录(C:\InstallDir\Apache2\bin),在那里启动Apache。

Apache配置文件是C:\Apache\Apache2\Conf\Httpd.conf,可用任何文本编辑器来编辑。查找DirectoryIndex,定位到下面这一行:

转自:动态网制作指南 www.knowsky.com

DirectoryIndex index.html index.html.var # index.php

为了允许Apache处理PHP页,要删除注释字符(#),变成:

DirectoryIndex index.html index.html.var index.php
 

还要允许在任何目录中使用.htaccess文件,所以请在配置文件中查找AllowOverride,把这个设置从None改成All。保存了所做的改动后,可继续在文本编辑器中打开该文件,因为等会儿安装PHP时,要再次编辑这个文件。

安装PHP

虽然可以下载PHP的源码,但和Apache 2一样,最好直接使用二进制发行包。Apache 2可采取2种方式来运行PHP程序:通过一个CGI接口来运行(外部调用Php.exe),或者使用PHP的DLL文件在Apache的内部运行。后一种方式的速度较快。所以,针对每个版本的PHP,都会提供2个Windows二进制发行包。较小的是.msi包,它会安装CGI可执行程序Php.exe,但其中拿掉了通过Apache DLL来运行PHP脚本所需的模块。较大的.zip包则包含了所有这些东西,你可以从snaps.php.net网站的Win32区域下载它们。文件下载完毕后,把它解压到C:\Php(保留文件夹名称)。除非你有绝对的把握,请同时下载PHP手册,它有多种语言的版本可供选择。

 

配置Apache 2来运行PHP4

转自:动态网制作指南 www.knowsky.com

现在来到了最有趣的部分:将Apache和PHP完美地配合起来。首先,请将C:\Php\Dlls目录中的所有DLL文件拷贝到Windows的System目录(%windir%\System)。接着,在Apache的配置文件(Httpd.conf)中查找包含了大量AddType命令那个小节,自己添加下面这一行:

AddType application/x-httpd-php .php

将C:\Php\Php.ini-recommended拷贝到Windows目录(%windir%),把它重命名为Php.ini,并用文本编辑器打开它。编辑其中对doc_root、extension_dir和session.save_path进行设置的3行,使其和下面展示的一致,注意要把InstallDir替换成你的Apache 2的安装目录的名称。

doc_root = c:\apache\apache2\htdocs
extension_dir = c:\php\extensions
session.save_path = c:/temp

在session.save_path中使用正斜杠和反斜杠都是允许的。PHP手册声称这些路径参数需要在最后添加一个反斜杠,但这个说法是不正确的。在PHP 4.3中不需要这样做。另外,如果C:\Temp不存在,请自己创建它。

下一步是允许Apache将PHP程序作为模块来运行,这要求你采取2个步骤。首先,将C:\Php\Php4ts.dll拷贝到Windows的系统文件夹(%windir%\System)。在Httpd.conf中找到LoadModule小节,自己添加下面这一行:

LoadModule php4_module “c:/php/php4apache2.dll”

如果你出于某种原因而需要在CGI模式中运行PHP程序(使用Php.exe),请将上面这一行变成注释,并在Httpd.conf中添加下面这些行:

ScriptAlias /php/ "c:/php/"
Action application/x-httpd-php "/php/php.exe"

一切都搞定了吗?

转自:动态网制作指南 www.knowsky.com

保存所做的更改后,你需要亲自去证明两点,才能确保Apache 2/PHP 4成为一对完美的搭档:Apache能正常加载吗,它能正确处理PHP页吗?

要知道Apache是否能够正常加载,在你已经打开的命令行窗口中输入以下命令:

apache ?k start

另外,如果Apache正在运行,可用以下命令重新启动它:

apache ?k restart

从命令行启动Apache的好处在于,如果出现一个错误,Apache会立即报告它。你可能遇到的最常见的问题在于,Apache可能由于某种原因而无法加载Php4apache2.dll。如果Apache报告了这个错误,请按前面所述的步骤重新操作一遍,确保一切都没有错误。

要知道Apache是否能正确地处理PHP页,请用你的文本编辑器创建一个简单的PHP页,命名为Phptest.php,其中只包含下面这一行:

<? phpinfo(); ?>

将文件保存到主Web服务器目录(C:\InstallDirectory\Apache\Apache2\Htdocs),用浏览器访问http://localhost/phptest.php。如果一切正常,应该看到一个含有PHP徽标的网页,其中包含大量设置和其他信息。要知道PHP当前是通过CGI来运行,还是在Apache内部运行,可以检查一下环境变量orig_script_name。如果PHP通过CGI来运行,这个变量的值就是/Php/Php.exe。如果Apache将PHP脚本作为模块来运行,该变量的值应该是/Phptest.php。

虽然在Windows上安装Apache 2和PHP并不是一件容易的事情,但也完全没必要采取摸着石头过河的做法。通过本文的说明,你应该可以快速搭建起这个史上最好的、成本最低的Web开发环境。

PHP 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
基于initPHP的框架介绍
Apr 18 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php单例模式实现方法分析
Mar 14 PHP
PHP实现简单数字分页效果
Jul 26 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
自定义PHP分页函数
Oct 09 #PHP
用PHP实现WEB动态网页静态
Oct 09 #PHP
用libtemplate实现静态网页生成
Oct 09 #PHP
初探PHP5
Oct 09 #PHP
用PHP连mysql和oracle数据库性能比较
Oct 09 #PHP
利用文件属性结合Session实现在线人数统计
Oct 09 #PHP
PHP中上传大体积文件时需要的设置
Oct 09 #PHP
You might like
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
破解Session cookie的方法
2006/07/28 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
广播体操口号
2014/06/18 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
开网店计划分析
2019/07/30 职场文书
用python实现监控视频人数统计
2021/05/21 Python