windows下apache搭建php开发环境


Posted in PHP onAugust 27, 2015

本文详细介绍了在Windows2003下使用Apache2.2.21/PHP5.3.5/Mysql5.5.19/phpMyAdmin3.4.9搭建php开发环境。

第一步:下载安装的文件

1. Apache 版本 httpd-2.2.21-win32-x86-no_ssl.msi

2. MySQL 版本 mysql-5.5.19-win32.msi

3. PHP 版本 php-5.3.5-Win32-VC6-x86.zip

4. phpMyadmin 版本 phpMyAdmin-3.4.9-all-languages.zip

提示:

1. 建议选择无SSL功能的Apache版本来完成开发,因此我们这里使用了Apache 2.2.21-win32-x86-no ssl.msi。

2. Windows下安装MySQL就选择.msi安装包格式,我们选择了mysql-5.5.19-win32.msi ,双击根据向导安装即可,简单方便。

3. PHP我们选择用Windows的.zip版本,php-5.3.5-Win32-VC6-x86.zip。从安全性和性能来说,都是zip版本的好,一般服务器也都是安装这个版本的。

   不要下载NTS版本或VC9版本的,因为VC9是专门为IIS定制的,而VC6 是为Apache或其他WEB服务软件提供的。

4. phpMyAdmin是以PHP为基础的在线MySQL管理工具,在进行phpMyAdmin3 安装时需要的PHP环境至少为PHP5.2,MySQL5 以上的版本,我们这里都符合要求。

第二步:安装文件

1. 在要安装的磁盘建一个文件夹。为了管理方便我们在D盘的根目录下创建一个WAMP文件夹。 D:\WAMP(WAMP是 windows+apache+mysql+php的缩写)。

2. 在WAMP文件夹下创建一个WWW文件夹,用来存放你的PHP网站程序。D:\WAMP\WWW。

3. 安装Apache服务器,把Apache服务器安装到 D:\WAMP\Apache 文件夹。具体Apache安装过程可以参考文档 Apache安装图解。

4. 把下载的php-5.3.5-Win32-VC6-x86解压到 D:\WAMP\PHP 文件夹。

5. 安装MySql数据库,把MySQL安装到 D:\WAMP\MySQL文件夹。具体MySQL安装过程可以参考文档 MySQL安装图解。

6. 解压phpMyAdmin-3.4.9-all-languages.zip,然后重命名为phpMyAdmin,将其复制到PHP网站程序目录。结果为 D:\WAMP\WWW\phpMyAdmin。

第三步:配置Apache

首先使用文本编辑工具(推荐 EditPlus )打开 D:\WAMP\Apache\conf\httpd.conf 文件,这个文件是Apache的配置文件,下面几步都是在修改这个文件的内容。

要注意的是修改完 httpd.conf 文件需重新启动Apache服务,新设置才会生效。

1. 设置监听端口

打开 httpd.conf 文件后,找到 Listen(大概在第46行),将它后面的数字改为8080,如下:

        Listen 8080

这个参数用来设置Apache服务器的监听端口,一般默认为80。修改为8080 是为了避免和Windows 2003系统的IIS端口号冲突,如果你没有启用IIS,也可以使用默认的80端口号。

2. 让Apache加载PHP模块

找到 #LoadModule vhost_alias_module modules/mod_vhost_alias.so (大概在第128行),在这行的后面添加以下内容:

LoadModule php5_module "D:/WAMP/PHP/php5apache2_2.dll"
 AddType application/x-httpd-php .php
 PHPIniDir "D:/WAMP/PHP"
LoadModule php5_module "D:/WAMP/PHP/php5apache2_2.dll"

这句意思是以module方式载入PHP5模块。

AddType application/x-httpd-php .php

这句意思就是将.php扩展名的文件作为php脚本执行。你可以使用你喜欢的任何其他扩展名,如 .html、.php5 甚至是 .txt  来执行PHP。

PHPIniDir "D:/WAMP/PHP"

这句用来指定PHP的配置文件php.ini 所在的目录。

如果是Apache 2 以module模块方式运行php5的话,就可以使用 PHPIniDir 指令。

3. 修改网站存放目录

我们知道Apache默认的网站存放目录为Apache安装目录下的htdocs文件夹。当你更改网站存放目录,就必须修改相应的Apache配置。

在配置文件 httpd.conf 中查找 DocumentRoot(大概在182行),将其修改为指向网站目录的正确文件夹。我们这里改为

 DocumentRoot "D:/WAMP/www"

同时,查找 This should be changed to whatever you set DocumentRoot to(大概在207行),在它下面有行 <Directoy 默认的DocumentRoot >,将其修改为你自己配置的DocumentRoot 路径。我们这里修改为:

<Directory "D:/WAMP/www">

4. 修改目录首页文件

 在配置文件 httpd.conf 中查找 DirectoryIndex index.html (大概在244行)将其修改成:

DirectoryIndex index.html index.htm index.php

DirectoryIndex 指的是当客户浏览器访问的路径是一个目录时,Apache默认执行的文件。

以我们所修改的为例:当客户浏览器访问一个目录时,Apache会去找该目录下的index.html,如果没有再找index.htm,还没有再找 index.php。都找不到则默认显示该目录下的文件列表。参考文档:如果防止Apache显示文件列表

第四步:配置PHP

打开PHP安装目录,即D:\WAMP\PHP,我们可以看到目录下有两个这样的文件 php.ini-development 和 php.ini-production,第一个是开发使用的配置文件,第二个是生产环境的配置,因为我们是在本机做开发,所以选择前者。将php.ini-development复制一份到同目录下,并改名为 php.ini。这个php.ini 就是当前使用的配置文件,以下几步都是在修改这个php.ini文件的内容。要注意的是,修改php.ini文件后需重新启动Apache服务,新设置才会生效。

1. 指定PHP扩展库的存放目录

在Windows下PHP的扩展库通常以 DLL 形式存放在PHP的ext目录中。
使用文本工具打开php.ini文件,查找extension_dir = "ext"(大概在809行),也就是在 On windows 下面那一行。把它前面的分号“;”去除掉,改为如下:

extension_dir = "D:/WAMP/PHP/ext"

extension_dir 表示PHP扩展库的具体目录,以便调用相应的DLL文件。

2. 开启相应的扩展库

默认情况下许多PHP的扩展库都是关闭的,比如默认PHP不支持连接Mysql数据库,需开启相应的扩展库。
这里我们开启一些常用的扩展库。

查找 ; Windows Extensions(大概在941行),在它的下面是extension列表。

找到如下扩展:

;extension=php_curl.dll
 ;extension=php_gd2.dll
 ;extension=php_mbstring.dll
 ;extension=php_exif.dll
 ;extension=php_mysql.dll
 ;extension=php_mysqli.dll
 ;extension=php_pdo_mysql.dll
 ;extension=php_pdo_odbc.dll
 ;extension=php_sockets.dll
 ;extension=php_xmlrpc.dll
 ;extension=php_xsl.dll

把以上extension 前面的分号 “;” 去掉。如果你希望加载其它扩展模块,方法相同,只要去掉前面的分号即可。

提示1:重启Apache提示 “unable to load dynamic library......php_curl.dll”,加载php_curl.dll错误。解决方法是拷贝 PHP 目录下的 libeay32.dll 和 ssleay32.dll 到 windows 目录或 windows/system32 目录下,只要是系统 Path 环境变量里包含的路径就可以。如果不想拷贝,你也可以直接把 PHP 路径放到系统 Path 环境变量里。 右击我的电脑=>属性=>高级=>环境变量=>系统变量里有个Path,双击打开,把你的PHP路径加个分号“;”再前面( ;D:\WAMP\PHP ),添加进去就OK了。重启Apache不再提示该错误。

提示2:Exif 扩展是用来显示图片的 exif 信息的,因为该扩展需要 mbstring.dll 支持,所以必须将 extension=php_exif.dll 这一行写到extension=php_mbstring.dll 的后面。

提示3:如果PHP自带的扩展库不能满足你的需要,你可以去 pecl.php.net 查找并下载你需要的库。windows用户可以去 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 下载已经编译好的DLL文件,也可以去http://museum.php.net/php5/ 载PECL集合压缩包。

提示4:很多人在找php_zip.dll,其实从php5.3开始已经集成了zip扩展,直接使用就行了。你可以用<?php phpinfo()  ?> 找到zip扩展的说明。

3. 让PHP支持短标签

在 php.ini 配置文件查找 short_open_tag = Off (大概在266行)把它修改成:short_open_tag = On 让其支持短标签。
php的代码一般包含在<?php .... ?>的标签内,设置 short_open_tag = On 之后,可以写成更简洁的形式:<? .... ?>。

4. 配置PHP的Session功能

在使用session功能时,我们必须配置session文件在服务器上的保存目录。我们需要为session建立一个可读写的目录,这个目录最好独立于网站目录之外。

这里把目录上建在了D:\WAMP\sessiontmp,然后在 php.ini 配置文件中找 ;session.save_path = "/tmp" (大概在1467行),去掉前面的分号“;” ,改为如下:

session.save_path = "D:/WAMP/sessiontmp"

5. 配置PHP的文件上传功能

同session一样,在使用PHP文件上传功能时,我们必须要指定一个临时文件夹以完成文件上传功能,否则文件上传功能会失败。
我们建立一个可读写的目录文件夹 D:\WAMP\fileuploadtmp,然后在 php.ini 配置文件中找到 ;upload_tmp_dir = (大概875行),修改为:

upload_tmp_dir = "D:/WAMP/fileuploadtmp"

PHP默认上传文件大小不超过2M,要想上传大于2M的文件,请参考文档  配置php.ini实现文件上传功能。

6. 设置时区

在 php.ini 配置文件查找 ;date.timezone = (大概在993行),去掉前面的分号“;” 改为如下:

date.timezone = PRC

date.timezone是PHP5.1开始新增加的配置参数,用来设置时区。默认date.timezone是被注释掉的,也就是默认时区是UTC格林威治标准时间。

我们这里改为 date.timezone = PRC(PRC,People's Republic of China,中华人民共和国),也就是日期使用中国的时区。这样可以解决时间相差八小时的问题。

第五步:配置phpMyAdmin

打开phpMyAdmin目录,即D:\WAMP\WWW\phpMyAdmin,我们可以看到目录下有一个config.sample.inc.php 文件,将这个文件复制一份到同目录下,并改名为 config.inc.php。这个config.inc.php 就是phpMyAdmin的配置文件,以下几步都是在修改这个config.inc.php 文件的内容。

1. 设置phpMyAdmin登录方式

打开config.inc.php文件,查找 $cfg['Servers'][$i]['auth_type'] ,设置如下:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

这个参数的值设置为cookie,每次登录phpMyAdmin需要输入用户名密码。这也是phpMyAdmin的默认设置。

然后找到  $cfg['blowfish_secret'],设置如下:

$cfg['blowfish_secret'] = 'admin10000.com';

此参数用于Cookies的加密,这是设置为admin10000.com,你可以改成自己的密码。

这里介绍一下phpMyAdmin 的四种登录方式:

cookie:这是phpMyAdmin配置默认的登录方式。需在登录界面输入MySQL的管理账号和密码。
           当选择cookie登录方式,还需要设置短语密码 $cfg['blowfish_secret'] ,这个密码用于Cookies的加密。
           例如:$cfg['blowfish_secret'] = 'admin10000.com';
           如果没有设置,登录phpMyAdmin会提示 “配置文件现在需要一个短语密码” 的错误。

config:直接在地浏览器地址栏输入phpMyAdmin登录地址即可登录,任何人都可以访问。用户名和密码提前在配置文件中设定好。
           此登录方式必须在配置文件中增加下面2行参数:
           $cfg['Servers'][$i]['user'] = '你的MySQL登录账号';
           $cfg['Servers'][$i]['password'] = '你的MySQL登陆密码;
           如果只是在本机器做开发,可以设置为config登录方式,省去每次输入密码的麻烦。

http:弹出一个对话框,输入用户名和密码后进入。
signon:类似于页面跳转的登录方式,同时需要设定$cfg['Servers'][$i]['SignonURL'],当你输入phpMyAdmin登录地址后会自动跳转到signonURL设定的网址。

2. 开启phpMyAdmin 高级功能

登录phpMyAdmin 后,在首页面的最下方会提示:“phpMyAdmin 高级功能未全部设置,部分功能不可用”。
现在我们来解决这个问题。使用phpMyAdmin的导入功能,导入phpMyAdmin/scripts/create_tables.sql 这个文件,从而建立必要的数据表。

接下来还需要新建一个MySQL用户,并授予其访问上一步操作建立的数据表的权限,这个MYSQL用户称为控制用户,为 phpMyAdmin 高级功能提供支持。

我们这里使用 pma 作为控制用户以及 pmapass 作为控制用户的密码。你可以自行更改。

在phpMyAdmin的SQL查询功能框中输入以下SQL代码:

GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
 GRANT SELECT (
 Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
 Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
 File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
 Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
 Execute_priv, Repl_slave_priv, Repl_client_priv
 ) ON mysql.user TO 'pma'@'localhost';
 GRANT SELECT ON mysql.db TO 'pma'@'localhost';
 GRANT SELECT ON mysql.host TO 'pma'@'localhost';
 GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
 ON mysql.tables_priv TO 'pma'@'localhost';

接着我们在 config.inc.php 中找到 User used to manipulate with storage 这一行。把它下面的2行参数注释(双斜杠“//”)去掉。

结果为:

$cfg['Servers'][$i]['controluser'] = 'pma';
 $cfg['Servers'][$i]['controlpass'] = 'pmapass';

这两行分别是控制用户和控制用户密码。也就是上边我们创建的那个用户。

接着找到 Storage database and tables 这一行,把下面的几个参数的注释去掉。结果为:

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
 $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
 $cfg['Servers'][$i]['relation'] = 'pma_relation';
 $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
 $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
 $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
 $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
 $cfg['Servers'][$i]['history'] = 'pma_history';
 $cfg['Servers'][$i]['tracking'] = 'pma_tracking';
 $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
 $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';

第六步:测试

将如下代码保存为index.php文件,放到D:\WAMP\WWW目录下面。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>测试服务器</title>
 </head>
 <body>
 <div style="text-align:center; color:red">
 <?php
 $link=mysql_connect("localhost","你的mysql管理账号","你的mysql管理密码");
 if(!$link) echo "MySQL数据库 连接失败!";
 else echo "MySQL数据库 连接成功!";
 mysql_close();
 ?>
 </div>
 <br/>
 <?php phpinfo(); ?>
 </body>
</html>

然后在浏览器地址栏输入“http://localhost:8080/index.php”。结果如下图所示:

windows下apache搭建php开发环境

PHP 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
怎样在UNIX系统下安装php3
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
php循环输出数据库内容的代码
May 24 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
PHP生成plist数据的方法
Jun 16 PHP
php实现多城市切换特效
Aug 09 PHP
学习PHP session的传递方式
Jun 15 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
php给图片添加文字水印方法汇总
Aug 27 #PHP
微信公众平台开发之配置与请求
Aug 26 #PHP
php基础教程
Aug 26 #PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 #PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 #PHP
百度地图API使用方法详解
Aug 25 #PHP
PHP实现生成唯一会员卡号
Aug 24 #PHP
You might like
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
php木马攻击防御之道
2008/03/24 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
区分python中的进程与线程
2020/08/13 Python
百度JavaScript笔试题
2015/01/15 面试题
优秀教师先进事迹
2014/01/22 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
2015大学迎新标语
2015/07/16 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
Vue监视数据的原理详解
2022/02/24 Vue.js
linux目录管理方法介绍
2022/06/01 Servers