多XAMPP安装适配不同PHP版本:注册表切换难题求解决方案
解决多XAMPP版本服务切换繁琐的方案
方案1:重命名服务避免注册表冲突
默认XAMPP注册的Apache和MySQL服务名都是Apache2.4和MySQL,导致路径冲突。通过修改服务名,让两个XAMPP的服务独立存在,无需修改注册表路径:
- 停止当前运行的Apache和MySQL服务:
可以用XAMPP控制面板的Stop按钮,或者管理员命令行执行:net stop Apache2.4 net stop MySQL - 重命名C盘XAMPP的服务(管理员命令行):
sc config Apache2.4 name= Apache2.4_C # 注意name=后有空格 sc config MySQL name= MySQL_C - 注册D盘XAMPP的服务:打开D盘XAMPP控制面板,点击Apache和MySQL的
Service按钮完成注册,此时会生成新的Apache2.4和MySQL服务(也可以手动重命名为Apache2.4_D和MySQL_D) - 后续启动服务时,直接在对应XAMPP控制面板操作,或者用命令启动指定服务:
# 启动C盘XAMPP服务 net start Apache2.4_C net start MySQL_C # 启动D盘XAMPP服务 net start Apache2.4_D net start MySQL_D
方案2:批处理脚本快速切换注册表路径
如果不想修改服务名,可以写两个批处理脚本,一键切换注册表中的服务路径:
切换到C盘XAMPP的脚本(管理员权限运行)
保存为SwitchToC_XAMPP.bat:
@echo off :: 修改Apache服务路径 reg add "HKLM\SYSTEM\CurrentControlSet\Services\Apache2.4" /v ImagePath /t REG_EXPAND_SZ /d "\"C:\xampp\apache\bin\httpd.exe\" -k runservice" /f :: 修改MySQL服务路径 reg add "HKLM\SYSTEM\CurrentControlSet\Services\MySQL" /v ImagePath /t REG_EXPAND_SZ /d "C:\xampp\mysql\bin\mysqld.exe --defaults-file=c:\xampp\mysql\bin\my.ini mysql" /f echo 已切换到C盘XAMPP服务路径! pause
切换到D盘XAMPP的脚本(管理员权限运行)
保存为SwitchToD_XAMPP.bat:
@echo off :: 修改Apache服务路径 reg add "HKLM\SYSTEM\CurrentControlSet\Services\Apache2.4" /v ImagePath /t REG_EXPAND_SZ /d "\"D:\xampp\apache\bin\httpd.exe\" -k runservice" /f :: 修改MySQL服务路径 reg add "HKLM\SYSTEM\CurrentControlSet\Services\MySQL" /v ImagePath /t REG_EXPAND_SZ /d "D:\xampp\mysql\bin\mysqld.exe --defaults-file=d:\xampp\mysql\bin\my.ini mysql" /f echo 已切换到D盘XAMPP服务路径! pause
注意:运行脚本前必须先停止对应的Apache和MySQL服务,否则会修改失败
方案3:单个Apache搭配多版本PHP(最优解)
无需维护两个XAMPP,用现有C盘的Apache,通过FastCGI配置让不同项目使用不同PHP版本:
- 提取D盘XAMPP中的PHP8.0文件夹,复制到独立目录(比如
C:\php8.0),确保PHP5.6、7.4、8.0三个版本的目录独立 - 打开C盘XAMPP的
apache\conf\httpd.conf,确认FastCGI模块已开启(之前配置PHP5.6时应该已经开启):LoadModule fcgid_module modules/mod_fcgid.so - 在
httpd.conf末尾添加三个PHP版本的FastCGI配置:# PHP 5.6 配置 FcgidInitialEnv PHPRC "C:\php5.6" FcgidWrapper "C:\php5.6\php-cgi.exe" .php56 # PHP 7.4 配置(XAMPP自带版本) FcgidInitialEnv PHPRC "C:\xampp\php" FcgidWrapper "C:\xampp\php\php-cgi.exe" .php74 # PHP 8.0 配置 FcgidInitialEnv PHPRC "C:\php8.0" FcgidWrapper "C:\php8.0\php-cgi.exe" .php80 - 配置虚拟主机,打开
apache\conf\extra\httpd-vhosts.conf,为每个项目指定对应PHP版本:# PHP5.6项目 <VirtualHost *:80> ServerName project56.local DocumentRoot "C:\projects\project56" <Directory "C:\projects\project56"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted AddHandler fcgid-script .php FcgidWrapper "C:\php5.6\php-cgi.exe" .php </Directory> </VirtualHost> # PHP7.4项目 <VirtualHost *:80> ServerName project74.local DocumentRoot "C:\projects\project74" <Directory "C:\projects\project74"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted AddHandler fcgid-script .php FcgidWrapper "C:\xampp\php\php-cgi.exe" .php </Directory> </VirtualHost> # PHP8.0项目 <VirtualHost *:80> ServerName project80.local DocumentRoot "C:\projects\project80" <Directory "C:\projects\project80"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted AddHandler fcgid-script .php FcgidWrapper "C:\php8.0\php-cgi.exe" .php </Directory> </VirtualHost> - 修改系统
hosts文件(C:\Windows\System32\drivers\etc\hosts),添加域名映射:127.0.0.1 project56.local 127.0.0.1 project74.local 127.0.0.1 project80.local - 重启Apache服务,访问对应的域名即可使用指定PHP版本,无需切换整个XAMPP服务
内容的提问来源于stack exchange,提问作者Ramisha Mukhtar
相关产品推荐
相关产品推荐

