【Windows】安装 Apache Web Server(含多版本PHP并存)

前言
架设php最简单的方法,大概是用xampp。但是有时候专案会用到不同php版本,需要切换。就算用xampp也是要用切换的方式,而不是并存。同一时间只能存在一种版本。因此后来自己的电脑也没使用xampp了。而且我架 Web Server 都是用免安装。所以换电脑重装 Windows ,资料都能重用。MySql 资料库也都还在。只要下个指令把 apache 跟 mysql 重新注册到 Windows 的服务。

资料夹结构

D:\Servers\    httpd\        httpd-2.4.53-win64-VS16\    php\        php-5.6.40-Win32-VC11-x64\        php-7.4.28-Win32-vc15-x64\        php-8.1.5-nts-Win32-vs16-x64\    mysql\        mariadb-10.6.7-winx64\        D:\Web\abc.com    htdocs\    专案摘要.txt    D:\Web\xyz.com    htdocs\    专案摘要.txt

安装资料库 MariaDB
以前 MySQL 就是 MySQL。后来被甲骨文收购,大家怕它可能将来会收费,所以原开发者脱离原团队,另外做了 MariaDB。号称完全移植原来的 MySQL。而现在甲骨文的 MySQL 也还是有免费版可以用。大概4这样。但是不管是 MySQL,还是 MariaDB,安装方式、写法都差不多。在新的功能略有差别,本文不详细说明。

免安装版
我自己是习惯用免安装版。这样之后重装作业系统比较方便。
下载 mariadb https://downloads.mariadb.org/mariadb/
目前的版本是 mariadb-10.6.7-winx64.zip
解压缩后放到自己喜欢的地方。例如 D:\Servers\mysql\mariadb-10.6.7-winx64

以前比较旧的版本,要将这个档案:
my-medium.ini
複製成:
my.ini

然后修改 my.ini

[client]...default-character-set = utf8mb4[mysqld]...max_allowed_packet = 128M...# 设定 MariaDB 安装的位置basedir = C:/Servers/mysql/mariadb-10.3.14-winx64# 设定 MariaDB 的资料库档所存放的位置datadir = C:/Servers/mysql/mariadb-10.3.14-winx64/data# 设定 MySQL 预设字元集character-set-server = utf8mb4collation-server = utf8mb4_general_ciinit-connect='SET NAMES utf8mb4;'[mysql]...# 设定 MySQL 预设字元集default-character-set = utf8mb4

但是现在新版在解压缩之后没有这种 ini 档。
在 Windows CMD 视窗执行
mysql_install_db
会自动在 data 资料夹产生 my.ini。也不用去改它。除非特殊需要。
(多新版呢?我也不知道。至少现在mariadb-10.6.7-winx64是这样)

然后注册到 Windows 服务就。
D:\Servers\mysql\mariadb-10.6.7-winx64\bin\mysqld --install
此指令会把 MariaDB 注册成 'MySQL'
开启 Windows 的【服务】,找到 MySQL, 在上面按右键,启动

执行升级
今天发生怪事
http://img2.58codes.com/2024/20148098UROe1cVH1H.jpg
上网查到执行一个 upgrade 真的解决了。
D:\Servers\mysql\mariadb-10.6.7-winx64\bin\mysql_upgrade -u root -p
如果重新安装,或许可以顺便执行一下。

root 预设没有密码。开启资料库工具,例如 Heidi SQL(可合法免费使用),或是 Navicat 要付费。
连线资料:
主机:localhost
帐号:root
密码:(空白)

执行 SQL 指令

--设定密码ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';--立即生效flush privileges;--如果要从远端连线CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

删除 SQL 服务
C:\> sc delete "MySQL"

安装 PHP
下载位址: http://windows.php.net/download/
Windows 上的 apache, 选择 Thread Safe,缩写 TS。
现在该页面最上面最新的是 PHP 8.1 (8.1.5),最下面最旧的是 7.4.28
如果要更旧的 5.x 版, 这里有 https://windows.php.net/downloads/releases/archives/
http://img2.58codes.com/2024/20148098sgyQtpived.jpg

下载
php-8.1.5-Win32-vs16-x64
php-7.4.28-Win32-vc15-x64
php-5.6.40-Win32-VC11-x64

如果现在在看这篇文章,刚入门,应该不需要用到 5.6 了。

设定 php.ini
将档案 php.ini-development 複製成为 php.ini,并做适当修改。具体字串可能因版本会有所不同。
例如 php_bz2 这个延伸套件,5.6 以前的版本是这样写
extension=php_bz2.dll
7.4以后的版本
extension=bz2
这个要注意一下,php.ini 不要随便複製。

大概改下面几个地方:

extension_dir = "ext"...extension=bz2extension=curl;extension=ffi;extension=ftpextension=fileinfoextension=gd2extension=gettext;extension=gmp;extension=intl;extension=imap;extension=ldapextension=mbstringextension=exif      ; Must be after mbstring as it depends on itextension=mysqliextension=oci8_12c  ; Use with Oracle Database 12c Instant Clientextension=odbcextension=openssl;extension=pdo_firebirdextension=pdo_mysql;extension=pdo_oci;extension=pdo_odbc;extension=pdo_pgsql;extension=pdo_sqlite;extension=pgsql;extension=shmop...date.timezone = "Asia/Taipei"...;上传档案大小限制post_max_size = 50Mupload_max_filesize = 50M;暂存资料夹sys_temp_dir = "C:\windows\Temp"upload_tmp_dir = "C:\windows\Temp"

有时候需要在 CMD 视窗执行 php xxx.php,或是设定 Windows 工作排程。就必须去设定 Windows $PATH 系统变数。而且只能择一设定。
Windows 系统内容 > 进阶 > 环境变数
找到 Path,在最后面新增指定的 php 路径,例如
D:\Servers\php\php-7.4.28-Win32-vc15-x64

但我为了多版本并存,所以我不是用这个方法。而是自己建一个 php.bat 批次档。看哪里会用到,就複製到哪里。每个专案都要弄一份。这个档案複製一下就好,不碍事。

例如
D:\Web\abc.com\htdocs\php.bat

@D:\Servers\php\php-8.1.5-Win32-vs16-x64\php.exe %*

连线 Oracle 资料库
如果要连线 Oracle 资料库,除了要启用 php_oci 相关模组,还要另外安装 Oracle Instant Client。这个要注意。到 Oracle 官网下载就可以。如果没有安装这个,启动 httpd 的时候不会报错,但是比如在 Laravel 使用 composer 指令的时候就会报错,说找不到 ext\php_oci 模组,但是在该目录下又明明存在 php_oci.dll。当时我刚开始使用 Oracle,查了好久。

安装 Apache
下载 apache: http://www.apachelounge.com/download/
解压缩到喜欢的地方,例如 D:\Servers\httpd\httpd-2.4.53-win64-VS16
这里通常只放新的。httpd有什么新的就用,通常没影响。

下载 mod_fcgid.so
一样是这里 http://www.apachelounge.com/download/
搜寻 mod_fcgid,注意版本要符合。
http://img2.58codes.com/2024/20148098J5AapSifBG.jpg

解压缩之后,把 mod_fcgid.so 放到 Apache 的 modules 里面
将 apache 注册成 Windows 服务
D:\Servers\httpd\httpd-2.4.53-win64-VS16\Apache24\bin\httpd -k install

删除服务
sc delete Apache2.4

注:在 CMD 视窗用 sc delete,如果是 PowerShell,要用
D:\Servers\httpd\httpd-2.4.53-win64-VS16\Apache24\bin\httpd -k uninstall

安装 Visual C++
这个套件若没装好,很可能导致 apache 无法读取 php modules,因而无法启动。
VS16,要安装 Microsoft Visual C++ 2015-2019 Redistributable
vc11,要安装 Microsoft Visual C++ Studio 2012

编辑 Apache24\conf\httpd.conf

将所有预设的 c:/Apache24 改成正确的路径。
例如 D:/Servers/httpd-2.4.53-win64-VS16/Apache24视情况修改 #ServerName www.example.com:80 。若使用 httpd-vhosts.conf ,应该是不用改。

解除下面两行的注解符号 #

LoadModule rewrite_module modules/mod_rewrite.so...Include conf/extra/httpd-vhosts.conf

其它 module 之后视情况再修改。

修改 DirectoryIndex

#DirectoryIndex index.htmlDirectoryIndex index.php index.html

修改 SRVROOT 常数

#Define SRVROOT "c:/Apache24"Define SRVROOT "D:/Servers/httpd/httpd-2.4.53-win64-VS16/Apache24"

新增测试网站
新增资料夹
D:\Web\php8x\htdocs
D:\Web\php7x\htdocs
D:\Web\php5x\htdocs

在里面各新增一个档案 phpinfo.php
<?php phpinfo(); ?>

修改 apache 的 httpd-vhosts.conf
D:\M\Servers\httpd\httpd-2.4.53-win64-VS16\Apache24\conf\extra\httpd-vhosts.conf
共建四个站。第1个是localhost,这个最好保留。第一个不管 ServerName 设成什么,都会被localhost读取

LoadModule fcgid_module modules/mod_fcgid.soAddHandler fcgid-script .fcgi .phpAddType application/x-httpd-php php#预设执行环境FcgidInitialEnv PHPRC "C:/Servers/php/php-7.4.28-Win32-vc15-x64"FcgidWrapper "D:/Servers/php/php-7.4.28-Win32-vc15-x64/php-cgi.exe" .phpFcgidMaxRequestLen 50000000<VirtualHost *:80>    ServerAdmin webmaster@dummy-host.example.com    DocumentRoot "D:/Web/localhost"    ServerName localhost    ErrorLog "logs/localhost-error.log"    CustomLog "logs/localhost-access.log" common       FcgidInitialEnv PHPRC "D:/Servers/php/php-7.4.28-Win32-vc15-x64"    FcgidWrapper "D:/Servers/php/php-7.4.28-Win32-vc15-x64/php-cgi.exe" .php    FcgidMaxRequestLen 50000000       <Directory "D:/Web/localhost">        Options FollowSymLinks ExecCGI        # All => 让 .htaccess 可以运作        AllowOverride All        Require all granted    </Directory></VirtualHost><VirtualHost *:80>    ServerAdmin webmaster@dummy-host.example.com    DocumentRoot "D:/Web/php8x"    ServerName www.php8x.local    ServerAlias php8x.local    ErrorLog "logs/php8x.local-error.log"    CustomLog "logs/php8x.local-access.log" common       FcgidInitialEnv PHPRC "D:/Servers/php/php-8.1.5-Win32-vs16-x64"    FcgidWrapper "D:/Servers/php/php-8.1.5-Win32-vs16-x64/php-cgi.exe" .php    FcgidMaxRequestLen 50000000       <Directory "D:/Web/php8x">        Options FollowSymLinks ExecCGI        AllowOverride All        Require all granted    </Directory></VirtualHost><VirtualHost *:80>    ServerAdmin webmaster@dummy-host.example.com    DocumentRoot "D:/Web/php7x"    ServerName www.php7x.local    ServerAlias php7x.local    ErrorLog "logs/php7x.local-error.log"    CustomLog "logs/php7x.local-access.log" common       FcgidInitialEnv PHPRC "D:/Servers/php/php-7.4.28-Win32-vc15-x64"    FcgidWrapper "D:/Servers/php/php-7.4.28-Win32-vc15-x64/php-cgi.exe" .php    FcgidMaxRequestLen 50000000       <Directory "D:/Web/php7x">        Options FollowSymLinks ExecCGI        AllowOverride All        Require all granted    </Directory></VirtualHost><VirtualHost *:80>    ServerAdmin webmaster@dummy-host.example.com    DocumentRoot "D:/Web/php5x"    ServerName www.php5x.local    ServerAlias php5x.local    ErrorLog "logs/php5x.local-error.log"    CustomLog "logs/php5x.local-access.log" common       FcgidInitialEnv PHPRC "D:/Servers/php/php-5.6.40-Win32-VC11-x64"    FcgidWrapper "D:/Servers/php/php-5.6.40-Win32-VC11-x64/php-cgi.exe" .php    FcgidMaxRequestLen 50000000       <Directory "D:/Web/php5x">        Options FollowSymLinks ExecCGI        AllowOverride All        Require all granted    </Directory></VirtualHost>

以上我用的都是正斜线 /,比较不会出错。

为什么这叫正斜线呢?英文叫 forward slash,人在往前行走或跑步的时候,身体会向前倾。而文字由左至右,所以向右倾斜的就是向前 forward。相反的就是反斜线 bask slash。

修改 Windows hosts档
C:\Windows\System32\drivers\etc\hosts

127.0.0.1      php8x.local127.0.0.1      php7x.local127.0.0.1      php5x.local

执行网页
http://img2.58codes.com/2024/20148098U8QPL4xG7J.jpg

第一次执行网页时,如果没有在开头加 www,例如只写 php8x.local/phpinfo.php,可能会被google当成是在搜寻这个字串。要加上 http:// ,例如 http://php8x.local/phpinfo.php 第二次就没问题了。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章