img

在 Windows 环境下开发 / 运维 PHP 项目时,经常需要切换不同 PHP 版本(如 7.2、8.1、8.3)适配不同项目需求。本文将完整分享如何实现:

  1. 类似 Linux 的php81 -v/php83 -v版本快捷调用;
  2. switch-php 8.1/switch-php 83一键切换默认 PHP 版本;
  3. 全程无坑,兼容 PowerShell/CMD,配置后永久生效。

一、前置准备

1. 环境要求

  • Windows 10/11 系统;
  • 已安装多个 PHP 版本(解压版即可,推荐路径无中文 / 空格);
  • 示例 PHP 路径(需替换为你的实际路径):
    • PHP 7.2:D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-7.2.34\php.exe
    • PHP 8.1:D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.1.33\php.exe
    • PHP 8.3:D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.3.28\php.exe

2. 核心思路

  • 快捷调用:通过批处理脚本(.bat)映射不同版本 PHP,添加到系统环境变量;
  • 版本切换:通过 PowerShell 脚本修改当前会话环境变量,实现switch-php一键切换;
  • 兼容设计:支持php81/php8.1等多种参数格式,适配不同使用习惯。

二、第一步:实现多版本 PHP 快捷调用(php81/php83 等)

1. 创建批处理脚本

新建专门存放快捷脚本的目录(如D:\php\bin),用于统一管理所有版本的调用脚本,避免环境变量混乱。

在该目录下新建 3 个文本文件,分别重命名为php72.batphp81.batphp83.bat,内容如下(替换为你的 PHP 实际路径):

php72.bat

1
2
@echo off
D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-7.2.34\php.exe %*

php81.bat

1
2
@echo off
D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.1.33\php.exe %*

php83.bat

1
2
@echo off
D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.3.28\php.exe %*
  • 说明:%* 表示传递所有命令行参数(如-v-m、运行脚本等),确保功能与直接调用php.exe一致。

2. 添加系统环境变量

D:\php\bin目录添加到系统Path,让 Windows 全局识别php72/php81等命令:

  1. 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」;
  2. 在「系统变量」中找到Path,点击「编辑」→「新建」;
  3. 粘贴D:\php\bin,点击「确定」保存(需保存所有弹窗);
  4. 重启 CMD/PowerShell(环境变量生效需重启命令行工具)。

3. 测试快捷调用

打开命令行,执行以下命令验证:

1
2
3
4
5
6
7
8
9
10
# 查看各版本信息
php72 -v
php81 -v
php83 -v

# 查看扩展列表
php83 -m

# 用指定版本运行PHP脚本
php81 your_script.php

若输出对应版本信息,说明快捷调用配置成功。

三、第二步:实现 switch-php 一键切换默认 PHP 版本

快捷调用适用于临时指定版本,而switch-php可切换全局默认php命令指向,无需每次输入php81/php83

1. 创建 switch-php.ps1 脚本

D:\php\bin目录下新建文本文件,重命名为switch-php.ps1,内容如下(已适配多版本,可直接复制):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 配置区:版本号 → php.exe完整路径(替换为你的实际路径)
$phpVersions = @{
"72" = "D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-7.2.34\php.exe"
"81" = "D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.1.33\php.exe"
"83" = "D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.3.28\php.exe"
}

# 无参数时提示用法
if ($args.Count -eq 0) {
Write-Host "请指定要切换的PHP版本,示例:" -ForegroundColor Cyan
Write-Host " switch-php 72 或 switch-php 7.2" -ForegroundColor Cyan
Write-Host " switch-php 81 或 switch-php 8.1" -ForegroundColor Cyan
Write-Host " switch-php 83 或 switch-php 8.3" -ForegroundColor Cyan
Write-Host "当前支持的版本:$($phpVersions.Keys -join '、')" -ForegroundColor Yellow
return
}

# 核心处理:强制转为字符串+兼容8.1→81写法
$version = [string]$args[0].ToString().Replace(".", "")

# 校验版本是否配置
if (-not $phpVersions.ContainsKey($version)) {
Write-Host "❌ 错误:未配置PHP $version 版本!" -ForegroundColor Red
Write-Host "✅ 当前支持的版本:$($phpVersions.Keys -join '、')" -ForegroundColor Green
return
}

# 获取PHP目录(去掉php.exe,仅保留目录路径)
$phpExePath = $phpVersions[$version]
$phpDir = $phpExePath.Replace("\php.exe", "")

# 修改环境变量:将当前版本目录置顶,优先生效
$env:PATH = "$phpDir;$env:PATH"

# 验证切换结果
Write-Host "✅ 已切换PHP默认版本为 $version(路径:$phpDir)" -ForegroundColor Green
Write-Host "当前PHP版本信息:" -ForegroundColor Cyan
php -v

2. 允许 PowerShell 执行脚本(必做)

Windows 默认禁止 PowerShell 执行脚本,需手动解除限制(仅需一次配置):

  1. 以「管理员身份」打开 PowerShell;
  2. 执行以下命令(临时允许当前用户执行本地脚本,安全无风险):
1
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
  • 说明:若后续需恢复默认限制,执行Set-ExecutionPolicy Restricted -Scope CurrentUser -Force即可。

3. 配置 switch-php 永久别名(无需输入完整路径)

为了直接输入switch-php调用脚本,需配置 PowerShell 别名(永久生效):

3.1 创建 PowerShell 配置文件(若不存在)

打开 PowerShell,执行以下命令创建配置文件目录和文件:

1
2
3
4
5
6
7
8
# 查看配置文件路径(记录输出结果,如C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1)
$PROFILE

# 创建配置文件目录(若不存在)
New-Item -Path (Split-Path $PROFILE) -ItemType Directory -Force

# 创建空配置文件
New-Item -Path $PROFILE -ItemType File -Force

3.2 写入别名配置

执行notepad $PROFILE打开配置文件,粘贴以下内容(替换为你的switch-php.ps1实际路径):

1
2
3
4
# 配置switch-php别名,指向脚本文件
function switch-php {
& "D:\php\bin\switch-php.ps1" @args
}

保存文件并关闭记事本,重启 PowerShell 使配置生效。

4. 测试 switch-php 切换功能

重启 PowerShell 后,执行以下命令验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 无参数提示(测试别名是否生效)
switch-php

# 切换到8.3版本(支持83或8.3写法)
switch-php 83
php -v # 输出8.3.28版本

# 切换到7.2版本
switch-php 7.2
php -v # 输出7.2.34版本

# 切换到8.1版本
switch-php 81
php -v # 输出8.1.33版本

若切换后php -v显示对应版本,说明功能正常。

四、关键补充:查看当前版本加载的 php.ini 路径

切换版本后,若需确认当前版本使用的php.ini文件,执行以下命令:

1
2
3
4
5
# 查看默认版本的php.ini路径
php --ini

# 查看指定版本的php.ini路径(如php81)
php81 --ini

输出示例(关键看Loaded Configuration File):

1
2
3
4
Configuration File (php.ini) Path: D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.3.28
Loaded Configuration File: D:\Dev\PypWebStudy\PhpWebStudy-Data\app\php-8.3.28\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)

五、常见问题排查

1. 快捷命令(php81)提示 “不是内部或外部命令”

  • 检查D:\php\bin是否添加到系统Path,且重启了命令行;
  • 确认php81.bat路径是否正确,且文件名无后缀错误(如.bat.txt);
  • 手动进入D:\php\bin目录,执行.\php81 -v,若能运行则是环境变量未生效,重启电脑即可。

2. switch-php 提示 “方法调用失败,不包含 Replace 方法”

  • 确保脚本中$version = [string]$args[0].ToString().Replace(".", "")已添加(强制转为字符串);
  • 若仍报错,检查输入参数是否为纯数字(如switch-php 83),脚本已兼容数字 / 字符串参数。

3. 切换后 php -v 仍显示旧版本

  • 执行$env:PATH查看环境变量,确认目标 PHP 目录是否排在最前面;
  • 关闭所有命令行窗口,重新打开(避免环境变量缓存);
  • 检查系统Path中是否有其他 PHP 目录,可暂时删除冗余路径。

4. PowerShell 打开 $PROFILE 提示 “找不到路径”

  • 按步骤 3.1 手动创建配置文件目录和文件,不要直接手动新建路径;
  • 若使用 PowerShell Core(v7+),配置文件路径为C:\Users\用户名\Documents\PowerShell\Microsoft.PowerShell_profile.ps1,脚本会自动适配。

六、总结

通过本文配置后,你将获得与 Linux 类似的 PHP 版本管理体验:

  • 临时指定版本:php72 -v/php83 your_script.php
  • 切换默认版本:switch-php 8.1/switch-php 83
  • 查看配置路径:php --ini/php81 --ini

配置过程仅需一次操作,后续可无缝切换多 PHP 版本,适配 Webman、ThinkPHP 等不同框架的版本需求,大幅提升开发 / 运维效率。如果需要添加更多 PHP 版本,只需在批处理脚本和switch-php.ps1配置区中补充对应路径即可。