🚀 Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy)+ 一键切换工具源码分享

在日常 PHP 开发中,尤其是 Windows 系统用户,经常会遇到需要在不同 PHP 版本之间来回切换的需求,比如:

  • 某些老项目需要 PHP 5.6,而新项目需要 PHP 8.2;
  • 使用 phpStudy 管理多个 PHP 版本,切换太麻烦;
  • 想在命令行中快速 php -v 就能看到目标版本。

虽然 phpStudy 提供了基本的运行环境管理,但它并不会自动修改系统环境变量中的 PHP 路径,这会导致命令行还是默认某个版本,带来不少困扰。

于是我写了一个简单小工具,帮大家 一键切换 PHP 版本(环境变量级别) ,支持 Windows + phpStudy,并附上源码和打包方法,方便你自己用或分享给团队。

📦 工具特点

  • 💡 自动识别 phpStudy 中所有 PHP 版本(路径为 D:\phpstudy_pro\Extensions\php)
  • 📌 支持一键切换系统 PATH 中的 PHP 路径
  • 🧩 图形化界面(Tkinter 实现)
  • 🧰 可打包成 .exe 工具,免 Python 运行环境
  • 🧼 安全不破坏原系统设置

🧪 效果展示

运行截图如下(切换到 PHP 8.0.2):

🧱 环境要求

  • Windows 系统
  • 安装了 phpStudy
  • 安装 Python 3.7+(打包成 .exe 可不需要)

🧑‍💻 源码展示:php_switcher.py

python 复制代码
import os
import subprocess
import tkinter as tk
from tkinter import ttk, messagebox

# 修改为你phpStudy的PHP目录
PHP_BASE_PATH = r'D:\phpstudy_pro\Extensions\php'

def get_php_versions():
    """获取php目录下所有版本文件夹"""
    try:
        versions = [f for f in os.listdir(PHP_BASE_PATH)
                    if os.path.isdir(os.path.join(PHP_BASE_PATH, f))
                    and os.path.exists(os.path.join(PHP_BASE_PATH, f, 'php.exe'))]
        return versions
    except FileNotFoundError:
        return []

def switch_php_version(version):
    """切换系统环境变量中的PHP版本"""
    php_path = os.path.join(PHP_BASE_PATH, version)
    try:
        # 设置系统PATH(前置插入php路径)
        subprocess.run(f'setx PATH "{php_path};%PATH%" /M', shell=True)
        messagebox.showinfo("成功", f"已切换到 PHP {version},请重启命令行窗口。")
    except Exception as e:
        messagebox.showerror("错误", f"切换失败: {e}")

def on_switch():
    selected = combo.get()
    if selected:
        switch_php_version(selected)
    else:
        messagebox.showwarning("提示", "请选择一个 PHP 版本。")

# GUI
root = tk.Tk()
root.title("PHP版本切换器 - phpStudy版")
root.geometry("400x180")
root.resizable(False, False)

tk.Label(root, text="请选择要切换的 PHP 版本:", font=("Arial", 12)).pack(pady=10)

versions = get_php_versions()
combo = ttk.Combobox(root, values=versions, font=("Arial", 12))
combo.pack(pady=5)

btn = tk.Button(root, text="切换版本", command=on_switch, font=("Arial", 12), bg="#4CAF50", fg="white")
btn.pack(pady=15)

root.mainloop()

🛠 打包为 .exe 工具(可选)

如果你不想每次用 Python 运行,也可以把它打包为独立的 .exe 工具,步骤如下:

第一步:安装打包工具

推荐不要用 Microsoft Store 的 Python。请从 www.python.org/ 下载标准版。 安装完成后,在命令行运行:

bash 复制代码
pip install pyinstaller

第二步:打包

进入脚本目录,运行:

bash 复制代码
pyinstaller --onefile --noconsole php_switcher.py

打包完成后,dist/ 目录下会生成一个独立的 php_switcher.exe,双击运行即可使用。

❗ 注意事项

  • 运行后修改的是系统 PATH 环境变量,需要重启 CMD/Powershell 窗口才生效
  • 如果想还原到原始状态,只需手动将 PATH 中多余的 PHP 路径删除即可
  • 如有多个 PHP 路径存在 PATH 中,建议保留当前一个,避免混淆

📥 结语

本工具旨在解决 Windows 下 PHP 多版本频繁切换的麻烦,轻量无侵入。如果你也经常使用 phpStudy 或在 Windows 上开发 PHP 项目,希望它能帮到你。

欢迎点赞、收藏或转发给有需要的小伙伴~

相关推荐
JaguarJack10 小时前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo10 小时前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack1 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay2 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954482 天前
CTF 伪协议
php
BingoGo4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack6 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端