Windows下Apache+PHP+MySQL搭建历程

一、需求来源

最近在做一个就业信息发布网站,发布每天的南北校宣讲会信息。此时前端模型已经搭建好,用的是HTML+CSS+JS,JavaScript用到jQuery库,总体上实现了静态页面的设计、UI图标效果的制作、页面动画的制作和信息展示区的模型搭建。

小巧的发布网站已经建地七七八八,万事具备,只差最关键的数据和网络部分了。


二、方案更改

在“早日完成项目”的目标驱动之下,我尝试着自己完成后台服务器的搭建工作。既然是要快速搭建,我能想到的首选就是使用集成开发环境xampp。这是一个后台服务器集成环境,在最新的版本中,xampp集成了Apache、MySQL、PHP、phpMyAdmin、FileZilla和Tomcat,使用的时候只要启动相应模块即可。

虽然,这对于想要快速建后台的同学来说不失为一个快捷简便的捷径,但是如此臃肿的集成环境并不是每一个模块我们都能用得到,并且,在简单的start和stop之间,我们并不能真正地理解每个模块其中的原理,只有自己动手把每个模块独自搭建起来并使它们相互关联,才能方便我们自己的后期维护。


三、集齐模块

要搭建一个后台服务器,有几个必要的模块:一个作为载体的服务器软件、一个数据库、一种后台语言环境,它们分别是Apache服务器、MySQL数据库和PHP环境。此外,为了方便管理数据库,我还增加了一个phpMyAdmin模块,用于在后台以可视化形式对数据库进行增删查改。各模块的版本如下:

Apache:2.4.12

MySQL:5.5.34

PHP:5.6.26

phpMyAdmin:4.4.11

要注意的是,PHP7已经不再用php_mysql组件,而是采用了更新的php_mysqli组件,这对其它模块会有些影响,我最开始用的是php7,在测试mysql_connect函数的时候显示找不到函数,但在查阅了半天资料后确认各个模块的配置并无问题,后来换了较低的5.6.26版本后,一切正常。

各模块都在网上有得下载,这里就不再多言了,下面说说在安装和配置过程中的注意事项。

搭建之前,你需要在某个根目录创建一个文件,比如叫做amp,代表Apache+MySQL+PHP。这个文件夹最终的结果会是这个样子:

文件夹amp最终结果

1.Apache安装

目前,从网络上下载的Apache模块大都是免安装直接解压的压缩包,那么直接解压到amp里面即可。

2.MySQL安装

MySQL分为客户端和服务器端,我选择的5.5.34版本本身是一个客户端,但是在安装完之后会推荐你再装一个服务器端,这个是必须的,因为我们要的就是一个服务器端的 MySQL。

关于MySQL客户端的安装并没有什么难度,一般来说一路“下一步”即可,一直到最后一步,提示安装服务器端,点击进入,进入以下配置:

首先是选择详细配置,点击下一步:

详细配置

作为开发者选择Developer Machine,点击下一步:

开发者机器

选择数据库类型,点击下一步:

数据库类型

配置数据库端口和开启严格模式,点击下一步:

端口和严格模式

选择utf8字符集,点击下一步:

字符集

这里选择服务器名称,默认MySQL(如果配置的最后一步无响应,可能是以前安装的版本未删除干净,此时可以删除相应注册表项目和修改这个服务器名称再尝试,具体可百度);接着勾选设置环境变量选项,点击下一步:

服务器名称和环境变量设置

最后设置账号和密码后即可完成安装。

3.PHP环境安装

我采用的5.6.26版本php是免安装解压版,直接解压到amp文件夹即可。

4.phpMyAdmin安装

phpMyAdmin4.4.11也是免安装解压版,直接解压到amp文件夹即可。


四、坑坑洼洼

到这里我们已经把三大模块和一个工具集齐,此时,这些模块仅仅是简单地放在一块儿,并没有产生关联。在这一步,我们要做的就是牵线搭桥的工作。

1.Apache配置

配置Apache要修改的文件只有一个:conf文件夹里的httpd.conf,用文本编辑器打开它,开始我们的配置。

(1)设置服务器端口

打开httpd.conf后,查找到listen,把80端口改为8080端口,以避免和IIS端口号冲突,如下:

Listen 8080

(2)加载php模块

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

LoadModule php5_module "D:/amp/php5/php5apache2_4.dll"

AddType application/x-httpd-php .php

PHPIniDir "D:/amp/php5"

第一句代码:让Apache加载位于amp目录下的php模块;

第二句代码:将以.php为扩展名的文件作为php脚本来运行;

第三句代码:指定php模块的初始化文件(php.ini)所在目录。

(3)设置Apache网站入口

在httpd.conf中找到DocumentRoot(大概在247行),后面的路径一般为htdocs,那里是存放项目网站的地方,服务器会以这个指定目录为入口进入网站。修改这个入口以及下面的Directory可以让Apache做不同的事情,比如修改为如下目录:

DocumentRoot "D:/amp/"

<Directory "D:/amp/">

然后restart服务器,在浏览器输入localhost:8080/phpmyadmin/index.php,这时服务器会以phpmyadmin目录下的index.php为入口,进入数据库管理页面。

如无特别需要,此处一般设置为项目网站的入口目录。

(4)开启Apache服务

在打开Apache服务器之前,可能我们会遇到一个问题,就是在“服务”里面无法开启Apache2.4服务,导致这种结果的原因又很多,其中普遍的原因很多网友都有提到,这里说一个比较偏门的,也是我踩中的一个大坑。

如果是第一次安装Apache,那么在“服务”选择Apache2.4,点击右键,选择属性,里面有个“可执行文件的路径”是这样的:

Apache服务路径

这是一个正确的路径。问题就出在这里。

由于我之前安装过Apache,“服务”里面已经存在Apache2.4服务,其“可执行文件的路径”是当时的安装路径。当我重新安装Apache后,新的路径和旧的路径不一样,而“服务”里面用的仍然是旧路径,当然启动不了啦。

解决办法就是进入注册表,在注册表中修改相应的路径,这里就不赘述了,同学们可以自行搜索。

2.PHP配置

在php5目录下我们会看到php.ini-development和php.ini-production两个文件,这里由于我们是作开发用,所以选择前者,把文件名修改为php,后缀名为ini,这就是我们在httpd.conf里面指定的php模块初始化文件。接下来我们就来配置这个php.ini:

(1)添加环境变量

既然是一个语言环境,那么就少不了环境变量的设置。无论怎样,先添加环境变量再说。做法就是将“D:\amp\php5\;”加入系统环境变量中的PATH,相信同学们都已经很熟悉了。

(2)设置扩展库目录

在php.ini中查找到extension_dir(大概在734行),设置它的值如下:

extension_dir = "D:/amp/php5/ext"

这个目录指定php扩展模块的存放目录,以便调用相应的.dll文件。这里用到的扩展模块有php_mysql.dll、php_mysqli.dll等等,在第三步中去注释的模块都是从这里调用的。

(3)开启相应的扩展库

php本身就是一个资源库,要让php做某件事,只要开启相应的模块就行了。

最开始的php.ini并没有开启任何扩展模块,这些模块都被注释了,我们可以把需要的模块去注释,这样就是开启模块了。这里需要开启的模块如下(把分号去掉即可):

;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

(4)让php支持短标签

短标签是指可以用简洁的<? ... ?>来代替<?php ... ?>。短标签的应用很普遍,开启短标签可以节省一些麻烦。

在php.ini中找到short_open_tag(大概在202行),设置其值如下:

short_open_tag = On

(5)配置php的session功能和上传功能

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

然后,在php.ini中找到session.save_path(大概在1391行),设置如下:

session.save_path = "D:/amp/php5/sessiontmp"

同session一样,在使用php文件上传功能时,我们必须要指定一个临时文件夹以完成文件上传功能,否则文件上传功能会失败。我们再建一个文件夹uploadtmp,作为上传文件的临时存放处。

在php.ini中找到upload_tmp_dir(大概在804行),设置如下:

upload_tmp_dir = "D:/amp/php5/uploadtmp"

(6)设置时区

在php中,默认date.timezone是被注释掉的,也就是默认时区是UTC格林尼治标准时间。这里我们需要把时区调整为中国时区,解决时间相差八小时的问题。找到date.timezone(大概在925行),设置如下:

date.timezone = PRC

(7)测试php

建立好php环境后,我们要测试一下php应用程序服务器能否在后台起到解析php的作用。可以在htdocs目录下创建一个php网页,命名为testphp.php,输入以下内容:

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <title>测试php</title>

</head>

<body>

    <div>

          <?php

              echo "hello";

          ?>

    </div>

</body>

</html>

启动Apache,在浏览器中输入“localhost:8080/testphp.php”,如果浏览器显示hello,说明php环境已经成功搭建并被Apache服务器所调用。

3.MySQL配置

在安装完MySQL服务器端后,我们还需要对它进行启动前的设置。由于之前在安装的时候已经进行了一些选择,这里我们只需要再对MySQL目录下的my.ini稍作设置即可。

(1)查看设置情况

如果我们在安装程序中已经进行了选择,那么用文本编辑器打开my.ini后,我们可以看到客户端和服务器端已经设置好了端口和字符集,如下:

[client]

port=3306

[mysql]

default-character-set=utf8

[mysqld]

port=3306

(2)设置basedir和datadir

basedir选项和datadir选项分别表示数据库服务器的位置和数据存放的位置。在[mysqld]内找到如下两行并设置:

basedir="D:/amp/mysql/MySQL Server 5.5/"

datadir="D:/amp/mysql/MySQL Server 5.5/Data/"

记得每次设置完后要到“服务”里面重新启动一下mysql条目。

(3)设置默认存储引擎

my.ini一般会为数据库选择一种存储引擎,默认为MYISAM,这里我们选择MYISAM即可,如下:

default-storage-engine=MYISAM

需要注意的是,如果选择的是innoDB引擎,那么还要再设置其数据存储目录,如下:

innodb_data_home_dir="D:/amp/mysql/"

(4)设置SQL mode

SQL mode可以对数据库进行一些有效地约束,一般设置为严格模式,在这里设置如下:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

(5)测试MySQL

至此,MySQL的配置就差不多了,但是要启用它,我们还需要到“服务”里启动mysql条目。然后再启动Apache,它就会带着MySQL一起飞了。

如何测试MySQL在php环境下起作用了呢?比较简单的方法就是写一个php去连接数据库。

我们可以在htdocs目录下新建一个php文本,命名为test.php写入如下代码:

<?php

$link=mysql_connect("localhost:3306","user","password");

if(!$link) echo "MySQL无法连接!";

else echo "MySQL连接成功!";

?>

然后启动Apache并访问localhost:8080/test.php,如果php能够正常使用mysql模块,那么mysql_connect函数是可以被调用到的,结果会显示“MySQL连接成功!”。

4.phpMyAdmin配置

在解压了phpMyAdmin之后,进入相应目录,在目录中找到一个名为config.sample.inc.php的文件,将此文件复制一份并命名为config.inc.php,这个文件就是phpMyAdmin的配置文件了。

(1)设置phpMyAdmin的登陆方式

phpMyAdmin有四种登陆方式:cookie、config、http和signon,其中默认方式是cookie,它的特点就是每次登陆都得输入用户名和密码,这里我们选择cookie就行。

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

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

设置了cookie方式后我们还要设置短语密码$cfg['blowfish_secret'],它可以用于Cookies加密,我们可以随便填,比如:

$cfg['blowfish_secret'] = 'passwordpassword';

(2)创建一个MySQL控制用户

创建控制用户的目的是授予其特定的权限以限制其完成特定的功能。在config.inc.php中找到如下两行并设置:

$cfg['Servers'][$i]['controluser'] = 'controluser';

$cfg['Servers'][$i]['controlpass'] = 'controlpass';

其中,controluser是设置控制用户的用户名,controlpass是设置控制用户的密码。

(3)设置phpMyAdmin高级功能

我们还需要在phpMyAdmin里开启一些高级功能,只要在config.inc.php中去掉相应注释即可,如下:

$cfg['Servers'][$i]['controldb'] = 'phpmyadmin';

$cfg['Servers'][$i]['bookmarktable'] = 'control_bookmark';

$cfg['Servers'][$i]['relation'] = 'control_relation';

$cfg['Servers'][$i]['table_info'] = 'control_table_info';

$cfg['Servers'][$i]['table_coords'] = 'control_table_coords';

$cfg['Servers'][$i]['pdf_pages'] = 'control_pdf_pages';

$cfg['Servers'][$i]['column_info'] = 'control_column_info';

$cfg['Servers'][$i]['history'] = 'control_history';

$cfg['Servers'][$i]['tracking'] = 'control_tracking';

$cfg['Servers'][$i]['designer_coords'] = 'control_designer_coords';

$cfg['Servers'][$i]['userconfig'] = 'control_userconfig';

(4)测试phpMyAdmin

至此,我们的phpMyAdmin的配置就全部完成了,如何测试呢?

之前提到过,要使用phpMyAdmin进入数据库管理界面,我们需要在httpd.conf中修改一下入口地址,如下:

DocumentRoot "D:/amp/"

<Directory "D:/amp/">

重启Apache,在浏览器中输入“localhost:8080/phpmyadmin/index.php”,我们就可以进入phpMyAdmin登陆界面了。输入用户名和密码即可进入管理界面。管理完毕后记得把入口地址改回来,方便进入项目网站。


到这里,我们的后台服务器的搭建就告一段落了,之后要怎么去使用它就是真正的后台开发的事情了。在没有了解服务器搭建之前,服务器的搭建对我来说一直是一种高深莫测的存在,后来读了鸟哥的Linux服务器开发篇,发现Linux下各种服务器的搭建就是改改配置文件和几句命令行的事,现在在Windows下也搭了一回,发现仍然是继续修改配置文件,只不过多了一些环境变量和服务的东西。其实前人已经帮我们做了许多工作,这使我们搭建服务器时没有想象中那么艰辛,所以,如果你需要一个后台,那就自己动手搭一个吧!


作者主页:

https://trekerz.github.io

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容