核心是通过虚拟主机按需加载不同PHP版本模块:禁用全局LoadModule,在每个VirtualHost内单独配置LoadModule、AddHandler、PHPIniDir及AcceptPathInfo On,配合端口或域名隔离,实现Apache 2.4.69下PHP 8.0.33/8.1.x/8.2.x共存。

在 Windows 11 上实现 Apache 2.4.69 与多个 PHP 版本(如 PHP 8.0.33、8.1.x、8.2.x)共存,核心不是替换 PHP,而是让 Apache 根据不同站点或端口,动态加载对应版本的 php8apache2_4.dll 模块。关键在于隔离模块路径、区分配置段、避免全局冲突——同一时间 Apache 只能加载一个 PHP 模块,因此必须用“虚拟主机 + 独立模块加载”方式实现逻辑共存。
准备多个 PHP 版本并规范路径
每个 PHP 版本需独立解压、严格匹配架构与 VC 编译器:
- PHP 8.0.33:下载
php-8.0.33-Win32-vs16-x64.zip(VC16 TS),解压到C:\php80 - PHP 8.1.30:下载
php-8.1.30-Win32-vs16-x64.zip,解压到C:\php81 - PHP 8.2.32:下载
php-8.2.32-Win32-vs17-x64.zip(注意:VS17 ≠ VS16,不能混用;若坚持全用 VS16 版本,请统一选 vs16 编译包) - 所有目录必须纯英文、无空格、不在系统保护路径(如
C:\Program Files) - 为每个 PHP 目录复制
php.ini-development→ 重命名为php.ini,并设置:extension_dir = "C:/php80/ext"(按实际路径调整)date.timezone = Asia/Shanghaicgi.fix_pathinfo = 1(启用 PATH_INFO,尤其对 Laravel/ThinkPHP 重要)
Apache 主配置中禁用全局 PHP 加载
删除或注释掉 httpd.conf 中所有全局 PHP 模块加载语句,例如:
# LoadModule php_module "C:/php/php8apache2_4.dll" # AddHandler application/x-httpd-php .php # PHPIniDir "C:/php"
保留这些行会导致 Apache 启动时只认最后一个加载的模块,其余版本失效。共存的前提是:不全局加载,改由各虚拟主机按需加载。
为每个站点配置独立 VirtualHost + 独立 PHP 模块
编辑 C:\Apache24\conf\extra\httpd-vhosts.conf,为每个域名定义专属配置块,每个块内单独加载对应 PHP 模块:
将提醒同步至 Windows/Outlook 日历。用户提及「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时触发。支持Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。
<virtualhost>
ServerName app80.test
DocumentRoot "D:/projects/app80/public"
<pre class="brush:php;toolbar:false;"># 加载 PHP 8.0.33 模块(仅对此虚拟主机生效)
LoadModule php_module "C:/php80/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php80"
<directory>
Require all granted
AllowOverride All
AcceptPathInfo On
</directory>
# 加载 PHP 8.1.30 模块(端口隔离,避免冲突)
LoadModule php_module "C:/php81/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php81"
<directory>
Require all granted
AllowOverride All
AcceptPathInfo On
</directory>
说明:
- 不同站点建议用不同端口(如
:80、:8081、:8082)或不同域名(配合 hosts 绑定),避免模块加载竞争 - 每个
<virtualhost></virtualhost>内的LoadModule是局部生效的(Apache 2.4.69 支持模块按上下文加载) - 务必在每个
<directory></directory>中启用AcceptPathInfo On,否则 Laravel/TP6 路由会 404 - 确保每个 PHP 版本的
php8apache2_4.dll文件真实存在且权限正常(右键 → 属性 → 安全 → SYSTEM 有读取权限)
验证与排错要点
完成配置后,分步验证:
- 运行
httpd -t:必须返回Syntax OK,否则检查路径拼写、斜杠方向(推荐正斜杠/)、DLL 文件是否存在 - 在各站点根目录下放
info.php(内容:<?php phpinfo(); ?>),分别访问http://app80.test/info.php和http://app81.test:8081/info.php - 确认页面顶部显示的 PHP 版本、
Loaded Configuration File路径、Server API显示为Apache 2.0 Handler - 若页面空白或下载 .php 文件:检查
AddHandler是否遗漏、PHPIniDir是否指向含php.ini的目录、Windows 文件权限是否放行 - 若报 500 错误:查看
C:\Apache24\logs\error.log,常见原因是php.ini中扩展路径错误或未启用mbstring/openssl
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










