Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy)+ 一键切换工具源码分享
🚀 Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy)+ 一键切换工具源码分享
- 📦 工具特点
- 🧪 效果展示
- 🧱 环境要求
- 🧑💻 源码展示:php_switcher.py
- 🛠 打包为 .exe 工具(可选)
- 第一步:安装打包工具
- 第二步:打包
- ❗ 注意事项
- 📥 结语
在日常 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
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 versionsexcept 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。请从 https://www.python.org/ 下载标准版。
安装完成后,在命令行运行:
pip install pyinstaller
第二步:打包
进入脚本目录,运行:
pyinstaller --onefile --noconsole php_switcher.py
打包完成后,dist/ 目录下会生成一个独立的 php_switcher.exe,双击运行即可使用。
❗ 注意事项
- 运行后修改的是系统 PATH 环境变量,需要重启 CMD/Powershell 窗口才生效
- 如果想还原到原始状态,只需手动将 PATH 中多余的 PHP 路径删除即可
- 如有多个 PHP 路径存在 PATH 中,建议保留当前一个,避免混淆
📥 结语
本工具旨在解决 Windows 下 PHP 多版本频繁切换的麻烦,轻量无侵入。如果你也经常使用 phpStudy 或在 Windows 上开发 PHP 项目,希望它能帮到你。
欢迎点赞、收藏或转发给有需要的小伙伴~
相关文章:
Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy)+ 一键切换工具源码分享
🚀 Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy) 一键切换工具源码分享 📦 工具特点🧪 效果展示🧱 环境要求🧑💻 源码展示:php_switcher.py🛠 打…...
ReportLab 导出 PDF(图文表格)
ReportLab 导出 PDF(文档创建) ReportLab 导出 PDF(页面布局) ReportLab 导出 PDF(图文表格) 文章目录 1. Paragraph(段落)2. Table(表格)3. VerticalBarChart࿰…...
【Kubernetes基础--Service深入理解】--查阅笔记4
目录 Service 的用法docker 对外提供服务service 对外提供服务 从集群外部访问 Pod 或 Service将容器应用的端口号映射到物理机将 Service 的端口号映射到物理机 Ingress:HTTP 7层路由机制创建Ingress Controller和默认的backend服务 k8s 通过创建 Serviceÿ…...
蓝桥杯 5. Excel地址
原题目链接 题目描述 Excel 单元格的地址表示很有趣,它使用字母来表示列号。例如: A 表示第 1 列B 表示第 2 列...Z 表示第 26 列AA 表示第 27 列AB 表示第 28 列BA 表示第 53 列... Excel 的最大列号是有限的,但本题将这种表示法一般化&…...
yolov8复现
Yolov8的复现流程主要包含环境配置、下载源码和验证环境三大步骤: 环境配置 查看电脑状况:通过任务管理器查看电脑是否有独立显卡(NVIDIA卡)。若有,后续可安装GPU版本的pytorch以加速训练;若没有࿰…...
C#学习第15天:泛型
什么是泛型? 定义:泛型允许您在类、接口和方法中定义占位符,这些占位符在使用时可以指定为具体的类型。作用:通过减少重复代码和提供更强的类型检查,提高了代码的可重用性和性能。 泛型的核心概念 1.泛型类 泛型类能…...
WPF ObjectDataProvider
在 WPF(Windows Presentation Foundation)中,ObjectDataProvider 是一个非常有用的类,用于将非 UI 数据对象(如业务逻辑类或服务类)与 XAML 绑定集成。它允许在 XAML 中直接调用方法、访问属性或实例化对象,而无需编写额外的代码。以下是关于 ObjectDataProvider 的详细…...
Windows系统安装RustDesk Server的详细步骤和客户端设置
Windows系统安装RustDesk Server的详细步骤 在Windows系统上安装RustDesk Server涉及几个关键步骤,包括安装必要的依赖、下载RustDesk Server程序、配置并启动服务。以下是详细的步骤: 1. 安装Node.js和PM2 RustDesk Server的某些版本可能需要Node.js环境来运行,而PM2是一…...
RestSharp和Newtonsoft.Json结合发送和解析http
1.下载RestSharp和Newtonsoft.Json 2编写ApiRequest和ApiResponse和调用工具类HttpRestClient 请求模型 /// <summary>/// 请求模型/// </summary>public class ApiRequest{/// <summary>/// 请求地址/api路由地址/// </summary>public string Route {…...
《基于 RNN 的股票预测模型代码优化:从重塑到直接可视化》
在深度学习领域,使用循环神经网络(RNN)进行股票价格预测是一个常见且具有挑战性的任务。本文将围绕一段基于 RNN 的股票预测代码的改动前后差别展开,深入剖析代码的优化思路和效果。 原始代码思路与问题 原始代码实现了一个完整…...
【Pytorch之一】--torch.stack()方法详解
torch.stack方法详解 pytorch官网注释 Parameters tensors:张量序列,也就是要进行stack操作的对象们,可以有很多个张量。 dim:按照dim的方式对这些张量进行stack操作,也就是你要按照哪种堆叠方式对张量进行堆叠。dim的…...
半导体设备通信标准—secsgem v0.3.0版本使用说明文档(3)之SECS(SEMI E4,SEMI E5)
文章目录 1、变量1.1、数组类型1.2、获取数据1.3、设置数据1.4、编码/解码1.5、Array1.6、List1.7、动态变量 2、Items2.1、 Item types2.2、 Creating items2.1.1、 From value2.1.2、From SML text2.1.3、 From protocol text 2.3、 Getting data2.3.1、 Python value2.3.2、…...
数据中台(大数据平台)之数据资源目录
数据资源目录是数据管理的账本,是数据应用的基础,更是是数据治理成果的体现,因此数据中台产品应提供数据资源目录编制、发布、资源挂载、下架的管理能力。 1.数据资源目录分类 资源目录能够支持基于业务特点创建和维护基础目录分类和特色目…...
【随身WiFi】随身WiFi Debian系统优化教程
0.操作前必看 本教程基于Debian系统进行优化,有些操作对随身WiFi来说可能会带来负优化,根据需要选择。 所有操作需要在root用户环境下运行,否则都要加sudo 随身wifi Debian系统,可以去某安的随声WiFi模块自行搜索刷机 点赞&am…...
【WORD】批量将doc转为docx
具体步骤进行: 打开Word文档,按下AltF11快捷键,打开VBA编辑器。在VBA编辑器中,左侧的“项目资源管理器”窗口会显示当前打开的Word文档相关项目。找到您要添加代码的文档项目(通常以文档名称命名)…...
JAVA Web_定义Servlet2_学生登录验证Servlet
题目 页面StudentLogin.html中有一HTML的表单代码如下: <form action"studentLogin" method"post">学生姓名:<input type"text" name"stuName" value""><br>登录密码:…...
深入理解设计模式之模板方法模式 1d87ab8b42e98069b6c2c5a3d2710f9a
深入理解设计模式之模板方法模式 深入理解设计模式之模板方法模式 在软件开发的漫长征程中,我们常常会遇到各种复杂的业务逻辑,其中部分逻辑具有相似的流程框架,但在具体细节上又有所不同。这种情况下,模板方法模式就如同一位得…...
Unity入门笔记(缘更)
内容来源SiKi学院的Luna’s Fantasy 文章目录 一、基础知识1.准备2.基础知识1.层级(Layer)2.轴心点3.预制体(Prefab)4.刚体组件(Rigidbody)5.碰撞器组件(BoxCollider) 二、代码1.移动 一、基础知识 1.准备 Unity安装: https://unity.cn 2.基础知识 1.层级(Layer…...
【Python】用Python写一个俄罗斯方块玩玩
【Python】用Python写一个俄罗斯方块玩玩 一、引言1.成品效果展示 二、思考准备1.思考设计2.代码设计2.1 游戏页面2.2 控件设计2.2.1 方块生成2.2.2 方块碰撞2.2.3 方块消融2.2.4 游戏主循环2.2.5 游戏窗口 三、游戏完整版 一、引言 今日看到侄子在玩游戏,凑近一看…...
Java 本地缓存的实现:常见的四种方式
在 Java 中,常用的本地缓存实现主要有以下几种,以下是它们的代码示例及适用场景: 一、使用 ConcurrentHashMap 实现简单缓存 适合轻量级、无需复杂淘汰策略的场景。 import java.util.concurrent.ConcurrentHashMap;public class Simp…...
记录一次生产中mysql主备延迟问题处理
登录库: mysql -uXXXX -pXXXX -P3306 -hXXXXXX -A 备库上执行:show slave status\G 查看 seconds_Behind_Master,延迟 2705s,而且还一直在增加。 SHOW CREATE TABLE proc_i_income_temp; -- 查看表的结构 show index from proc…...
路由器原理与配置技术详解
一、路由基础原理 1.1 路由器的核心功能 网络层设备:工作在OSI参考模型第三层,实现不同网络间的互联互通智能路径选择:基于路由表为数据包选择最优传输路径协议转换:处理不同网络接口间的协议差异(如以太网与PPP&…...
第五节:React Hooks进阶篇-如何用useMemo/useCallback优化性能
反模式:滥用导致的内存开销React 19编译器自动Memoization原理 React Hooks 性能优化进阶:从手动到自动 Memoization (基于 React 18 及以下版本,结合 React 19 新特性分析) 一、useMemo/useCallback 的正确使用场景…...
STL迭代器:C++泛型编程的核心工具 [特殊字符]
在C中,STL(标准模板库)的迭代器是泛型编程的核心,它不仅解决了指针的局限性,还为算法与容器之间提供了抽象的访问接口。接下来,我们将探讨迭代器的核心作用、与指针的关键区别以及其设计哲学。 一、迭代器的…...
ffmpeg无损转格式的命令行
将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码...
Monorepo 是什么?前端项目的多模块管理终极方案
前言 你是否曾经维护过多个前端项目?是否在多个项目之间来回复制粘贴组件,工具函数?是否经常被"组件更新没同步","构建时间太长","依赖版本冲突"等问题困扰? 这些问题都指向一个关键点: 项目结构和管理方式 今天,我来聊聊一种非常火但又容…...
对象池模式在uniapp鸿蒙APP中的深度应用
文章目录 对象池模式在uniapp鸿蒙APP中的深度应用指南一、对象池模式核心概念1.1 什么是对象池模式?1.2 为什么在鸿蒙APP中需要对象池?1.3 性能对比数据 二、uniapp中的对象池完整实现2.1 基础对象池实现2.1.1 核心代码结构2.1.2 在Vue组件中的应用 2.2 …...
条款05:了解C++默默编写并调用哪些函数
目录 1.默认生成的函数 2.无法生成的情况 2.1当成员函数有引用 或者 被const修饰 2.2.operator在基类被私有 1.默认生成的函数 class empty {};//相当于class empty { public:empty(){ ... } // 构造函数empty(const empty& rhs) { ... }// 拷贝构造~empty(){ ... } //…...
PythonFlask打造高效流式接口的实战
一、环境搭建与项目初始化 要使用 Flask 提供流式接口,首先得确保开发环境正确配置。在 Ubuntu 系统上,可借助 apt 包管理器便捷安装 Python 和 pip: sudo apt update sudo apt install python3 python3-pip对于 Windows 用户,推荐从官网下载安装包进行安装。安装完成后,…...
强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架
强化学习算法 (一)动态规划方法——策略迭代算法(PI)和值迭代算法(VI) (二)Model-Free类方法——蒙特卡洛算法(MC)和时序差分算法(TD) (三)基于动作值的算法——Sarsa算法与Q-Learning算法 (四…...
