文件下载
Apache下载
windows
版下载页面:https://httpd.apache.org/docs/current/platform/windows.html#down在页面中找到
ApacheHaus
,进入https://www.apachehaus.com/cgi-bin/download.plx或者找到
Apache Lounge
,进入https://www.apachelounge.com/download/PHP下载
windows
版下载页面:https://windows.php.net/downloadwindows
版历史版本下载:https://windows.php.net/downloads/releases/archives/MySQL下载
windows
版下载页面:https://dev.mysql.com/downloads/mysql/
不同版本的标识的含义
VC16:需要的VC运行库版本,只要主机安装有相应的运行库即可,
Apache
与PHP
的VC
不必保持一致X86和X64:32位和64位,32位操作系统只能选择32位,64位操作系统可以任意选择,建议选择64位版本
(Non)Thread Safe:(非)线程安全,缩写
(n)ts
,LoadModule
模式加载dll
的选择Thread Safe
版本的PHP,CGI模式运行的选择Non Thread Safe
版本的PHP
注意:如果本地没有安装对应的 Visual C++ Redistributable
运行库 需要先下载安装,不同版本的对应关系如下表:
VS | VC |
---|---|
Visual C++ Redistributable for Visual Studio 2015-2019 | VC16 |
Visual C++ Redistributable for Visual Studio 2017 | VC15 |
Visual C++ Redistributable for Visual Studio 2015 | VC14 |
Visual C++ Redistributable for Visual Studio 2014 | VC13 |
Visual C++ Redistributable for Visual Studio 2013 | VC12 |
Visual C++ Redistributable for Visual Studio 2012 | VC11 |
Visual C++ Redistributable for Visual Studio 2010 | VC10 |
Visual C++ Redistributable for Visual Studio 2008 | VC9 |
这里是 VC16
对应的 Visual C++ Redistributable for Visual Studio 2015-2019
库的下载地址,需要其他版本的修改URL中的数字 16
即可:
64位:https://aka.ms/vs/16/release/VC_redist.x64.exe
32位:https://aka.ms/vs/16/release/VC_redist.x86.exe
解压文件,并将Apache和MySQL的bin目录和PHP根目录添加到系统环境变量PATH
中,好处有:
执行命令时不需要再
cd
进入指定目录配置文件中可以不必再指定绝对路径。比如php.ini中的
extension_dir
开启PHP的部分扩展需要依赖PHP目录下的动态库(dll文件),如果未设置
PATH
,则PHP作为Apache的子模块运行时需要修改Apache的配置文件,通过指令LoadFile
显式的载入动态库文件。比如:开始curl扩展时需要依赖libsasl.dll
和libssh2.dll
Apache安装
安装前的检查
解压文件,以下以解压到C:\Apache24
为例,Apache配置文件为C:\Apache24\conf\httpd.conf
。
Apache服务默认使用80端口,需要检查确定80端口未被占用。通过 netstat -ano|findstr ":80"
查看第二列的地址和端口号,判断端口号是否被占用。如果端口被占用,根据pid可在任务管理器中找到对应的程序,禁用占用端口的程序以解决冲突,也可以修改Apache默认的端口号【打开httpd.conf
,找到Listen 80
,修改为Listen 90
或者其他未被占用的端口号】。Listen指令的更多说明见:Listen指令的用法
修改ServerName【Apache的服务器名以及端口】:打开httpd.conf
,找到#ServerName www.example.com:80
,在下方添加一行ServerName localhost:80
【配置文件中的“#”表示注释,使当前行的配置不生效】,不配置此项可能会在安装时引起Apache告警。
如果不想以C:\Apache24
为服务器根目录,在调整文件路径的同时,还需要修改http.conf
的Define SRVROOT C:\Apache24
为调整后的服务器根目录.
安装
打开命令行提示符:
cd C:\Apache24\bin #进入bin目录【配置系统环境变量PATH在每次执行Apache命令前都不必再进入bin目录】
httpd -k install -n "Apache2.4" #-n指定服务名称,缺省为Apache2.4,一台主机有多个Apache服务时需要为不同服务指定不同名称以作区分。
提示“service is successfully installed”,表示Apache安装成功
Apache服务管理
打开命令行提示符:
cd C:\Apache24\bin #进入bin目录【配置系统环境变量PATH在每次执行Apache命令前都不必再进入bin目录】
httpd -k start -n "Apache2.4" #启动服务
httpd -k restart -n "Apache2.4" #重启服务
httpd -k stop -n "Apache2.4" #停止服务
httpd -k uninstall -n "Apache2.4" #卸载服务
还可以通过 services.msc
打开系统服务,在界面上操作服务的启动、重启和停止。
Apache启动成功后,可以用浏览器访问 http://localhost
如果监听的不是80端口需要加“:端口号”,网页显示“it works”表示Apache安装成功。
PHP安装
PHP本身是免安装的,但是需要修改Apache配置,使PHP通过Apache运行。
一、作为Apache的模块运行
修改Apache的配置文件conf/httpd.conf,在文件末尾增加以下行:
#映射 .php 后缀的文件的mime类型
AddType application/x-httpd-php .php
#Load PHP模块,作为Apache的子模块运行
LoadModule php7_module "C:\php\php7apache2_4.dll"
#指定php配置文件php.ini所在的目录,将php目录中的php.ini-development重命名为php.ini作为php配置文件
PHPIniDir "C:\php"
二、CGI模式运行
修改Apache的配置文件conf/httpd.conf,在文件末尾增加以下行:
ScriptAlias /php7.2-nts/ "C:/web/php7.2-nts/"
ScriptAlias /php5.6-nts/ "C:/web/php5.6-nts/"
# 将指定mime类型通过cgi执行
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php7.2-nts/php-cgi.exe"
# 或将指定的处理程序通过cgi执行
AddHandler custom-script .php
Action custom-script "/php7.2-nts/php-cgi.exe"
注意, 此模式需要根目录有访问权限
<Directory />
Require all granted
</Directory>
此种模式可以定义多个 ScriptAlias
,然后在 <VirtualHost>
或者 .htaccess
中设置 Action
指向不同版本的PHP,这样一来不同项目,甚至不同目录可以使用不同版本的PHP,而不用来回切换。
三、FastCGI模式(常驻型CGI)
到 https://www.apachelounge.com/download/ 下载 mod_fcgid
文件,放到Apache的 modules
目录下
修改Apache的配置文件conf/httpd.conf,在文件末尾增加以下行:
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule mod_fcgid.c>
# 以下配置项可以放到虚拟主机中,实现不同站点差异化配置,比如不同站点应用不同的PHP版本
AddHandler fcgid-script .php
#php-cgi的路径
FcgidWrapper "C:/web/php7.2-ts/php-cgi.exe"
#php.ini的存放目录
FcgidInitialEnv PHPRC "C:/web/php7.2-ts/"
</IfModule>
更多 Fcgi
配置项详见 https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
注意, 此模式需要为文档目录设置
<Directory "D:/www/html">
Options ExecCGI
</Directory>
以上三种方式修改后保存,重启Apache服务,然后在网站根目录新建index.php文件:
<?php
phpinfo();
?>
在浏览器访问http://localhost/index.php ,如能正常打开并显示PHP版本等信息则说明PHP安装成功。
PHP基础配置
date.timezone,设置时区,一般设置为PRC(东八区中国北京时间)
extension_dir, 指定扩展库文件所在的目录,比如C:/php/ext(未设置环境变量时用磁盘绝对路径)
extension,加载扩展库,ext目录已自带库文件的,只需要去掉扩展前面注释的分号或者增加一行比如extension=curl
即可,需要安装其他扩展库则需要先下载库文件放到ext目录,可以到 https://windows.php.net/downloads/pecl/releases/ 下载 (注意要选择与PHP版本相对应的库)
MySQL安装
MySQL基础配置
windows
上, MySQL
的默认配置文件是安装目录下的 my.ini
,如果不需要对默认配置做修改,则不需要配置文件。
反之,在安装目录下,新建 my.ini
(注意文件编码必须是 ASCI
), 可以参考以下配置项:
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir = D:/WebServer/mysql-8.0.12-winx64
# 设置mysql数据库的数据的存放目录
datadir = D:/data/MySQL8-data
# 允许最大连接数
max_connections = 200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors = 10
# 指定服务端使用的字符集(从8.0起,不指定时默认为utf8mb4)
character-set-server = utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
[client]
#[client] 与 [mysql]等效
# 设置mysql客户端连接服务端时在未指定的情况下使用的默认端口和默认字符集
port = 3306
default-character-set = utf8mb4
MySQL初始化
打开命令提示符,cd进入MySQL安装目录的bin目录,执行mysqld --initialize --console
, 执行完成后,会打印root 用户的初始默认密码,比如
A temporary password is generated for root@localhost: IQsXuqytt1!U
初始密码就是:IQsXuqytt1!U。如果没记住初始密码,删除datadir定义的目录,重新初始化即可重新生成
此步骤主要是生成 data
目录。 MySQL8以后才需要此步骤,以前的版本安装包中已经携带了 data
目录,初始密码为空
MySQL安装及管理
mysqld --install [服务名] #服务名缺省为MySQL,一台主机有多个MySQL服务时需要为不同服务指定不同名称以作区分,服务名不区分大小写
mysqld --remove [服务名] #卸载服务
net start 服务名 #启动服务
net stop 服务名 #停止服务
注意: mysql在windows命令行没有直接重启的指令,需要重启时需要先停止再启动
启动成功就说明已经安装完成,可以在命令行下使用mysql -uroot -p
输入密码,连接数据库验证。
修改MySQL密码
# MySQL8以前可以使用此方法修改密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
#MySQL8以后使用此方法修改密码。由于目前很多第三方客户端都尚未支持MySQL8新的密码加密方式,这里仍使用旧的加密方式。
ALTER USER "root"@"localhost" IDENTIFIED WITH mysql_native_password BY "你的新密码";
最后,修改 php.ini
,打开 php_mysqli
和 pdo_mysql
扩展,重启 Apache
即可使用 PHP
内置的 mysqli
和 pdo
类库连接数据库。
安装多个 Apache 和多个 MySQL(版本可以不同)
下载两个不同版本的 Apache
和 MySQL
,当然也可以同一个版本的,放置到两个不同的目录,比如 C:/Apache1
C:/Apache2
C:/MySQL1
C:/MySQL2
。将 C:/Apache1/bin
和 C:/MySQL1/bin
添加到环境变量 PATH
中,重启电脑。
安装第一个
cd C:/Apache1/bin
httpd -k install Apache1
cd C:/MySQL1/bin
mysqld --install MySQL1
安装第二个
cd C:/Apache2/bin
httpd -k install Apache2
Apache用此方法安装的第二个服务 Apache2 是正常的,其执行文件就是 C:/Apache2/bin/httpd.exe
cd C:/MySQL2/bin
mysqld --install MySQL2
MySQL用此方法无法安装的第二个服务 MySQL2 ,其执行文件是 C:/MySQL1/bin/mysqld.exe
有些出乎意外
经过试验,可以通过指定绝对路径的方式安装:
C:/MySQL2/bin/mysqld --install MySQL2
MySQL 启动多个实例
复制多个配置文件,每个配置文件设置不同的端口号、数据目录、日志目录等
像启动第一个实例一样,初始化,不同的是
mysqld
命令需要使用参数--defaults-file
指定不同的配置文件。mysqld --defaults-file=C:/MySQL/my3307.ini --initialize --console
mysqld --defaults-file=C:/MySQL/my3308.ini --initialize --console
安装服务,除了指定配置文件外,每个实例的服务名也不能相同
mysqld --install MySQL3307 --defaults-file=C:/MySQL/my3307.ini
mysqld --install MySQL3307 --defaults-file=C:/MySQL/my3308.ini
特别注意: --defaults-file
参数的位置必须排在第一位,除非有 --install
命令时 --install
排第一