Windows中安装Apache2和PHP4权威指南


Posted in PHP onNovember 18, 2006

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

在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文件。同意许可协议后,正确设置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,以下代码就可以了: 

<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,定位到下面这一行: 

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 

现在来到了最有趣的部分:将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"  

一切都搞定了吗? 

保存所做的更改后,你需要亲自去证明两点,才能确保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 相关文章推荐
php过滤危险html代码
Aug 18 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
浅谈PHP中的
Apr 23 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 #PHP
Windows下的PHP5.0详解
Nov 18 #PHP
一些关于PHP的知识
Nov 17 #PHP
PHP4和PHP5共存于一系统
Nov 17 #PHP
Apache2 httpd.conf 中文版
Nov 17 #PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 #PHP
一个MYSQL操作类
Nov 16 #PHP
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
xtree.js 代码
2007/03/13 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python编程实现希尔排序
2017/04/13 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Python实现Restful API的例子
2019/08/31 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
appium+python adb常用命令分享
2020/03/06 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
离婚协议书范文
2015/01/26 职场文书