windows快速切换php版本

因为有几个项目用的laravel10,composer的php版本不一样,手动去环境变量里面改很麻烦,所以写了个bat方便切换
创建一个setphp.bat的文件来自动设置系统变量,PHP_HOME是多个php版本的父目录,PHP_VERSION是版本文件夹的名称,前两个是bat自动设置的,然后到系统变量Path里面手动添加%PHP_HOME%\%PHP_VERSION%,按php的位置来拼接路径

windows快速切换php版本

windows快速切换php版本

windows快速切换php版本

windows快速切换php版本

使用方法:双击打开,或者放到Path系统环境变量中全局使用,cmd输入setphp,然后输入7或者8就可以了。

@echo off
chcp 65001

::修改环境变量需要管理员权限,知乎复制的获取管理员权限运行
cd /d "%~dp0"
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"%temp%\getadmin.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"%temp%\getadmin.vbs"
echo WScript.Quit >>"%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" /f
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
exit

:Admin

::如果没设置PHP_HOME,则设置PHP_HOME
set "EXPECTED_PHP_HOME=D:\phpstudy_pro\Extensions\php"

if "%PHP_HOME%" neq "%EXPECTED_PHP_HOME%" (
    setx /m PHP_HOME "%EXPECTED_PHP_HOME%
)

:loop
set /p version=请输入要切换到的 PHP 版本(7或 8):
echo %version%

::设置PHP_VERSION
if "%version%" == "7" (
    setx /m PHP_VERSION php7.4.3nts
    echo PHP version set to 7.4.3
) else if "%version%" == "8" (
    setx /m PHP_VERSION php8.1.20nts
    echo PHP version set to 8.1.20
) else (
    echo 无效的PHP版本
)

goto loop

关于这段代码:

EXPECTED_PHP_HOME变量是预期的php根目录,我的是D:\phpstudy_pro\Extensions\php,如果环境变量的PHP_HOME不存在或者目录不对,就会修改为指定的目录。
version变量就是输入的php版本号,setx /m PHP_VERSION php8.1.20nts表示将PHP_VERSION设置为php8.1.20nts

这样一来,就拼接出了完整的php目录D:\phpstudy_pro\Extensions\php\php8.1.20nts。然后跳到提问开头进行循环,方便来回切换。

补充:

windows快速切换php版本

windows快速切换php版本

后面我用了另外一种方式,可以不用切换了,直接把各个版本的php复制一份改为php81 php74,然后把他们的路径都添加到Path,同样地,复制composer.bat改成composer81.batcomposer74.bat,把里面的内容改为@php81 "%~dp0composer.phar" %*,@php74 "%~dp0composer.phar" %*,安装的时候就用composer74 require xxx,或者composer81 require xxx,当然之前那个也还有用,可以切换默认的php和composer

评论建议我使用虚拟机开发,因此补充下:

虚拟机平常也有使用,这篇文章主要是解决windows环境切换的。

我用的vmware运行ubuntu虚拟机+宝塔,他和docker有冲突,docker和vmware之间只能开一个,切换还要改hypervisorlaunchtype。

因为我的虚拟机装了图形界面,还有一些乱七八糟的软件,当做双系统使用,比较占内存(我给了4g内存,3g会点卡顿),修改代码保存后,主机这边刷新浏览器反应会稍慢一点(虚拟机通病,大概慢零点几秒,主要是不够丝滑)。

由于我经常开三四个phptorm,之前开十几个文件会卡,就把最大内存改成2g了,用起来更流畅,同时会开一堆浏览器网页,以及开机自启常挂后台的一些软件(qq,微信之类的),再开虚拟机的话32g内存占用会到六七十,一些简单的项目我就在windows开发,比较复杂的就放虚拟机了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 25

推荐使用 phpenv支持php8.2 支持一键切换php版本 phpStudy 已经好久没有更新了

1年前 评论
DogLoML (楼主) 1年前
MArtian 1年前

批处理可以修改一下。

从cwd获取composer.json或.phpver,解析当前路径执行php需要的版本,动态调用。

比如 在 /proj1/.phpver 里写 8.1 则在 /proj1 执行php自动调用php81

同时还能兼容composer

1年前 评论
cevin (作者) 1年前
DogLoML (楼主) 1年前
cevin (作者) 1年前
DogLoML (楼主) 1年前

快别折腾windows了,整个虚拟机也行啊

1年前 评论
Dash007 (作者) 1年前
DogLoML (楼主) 1年前
DogLoML (楼主) 1年前
DogLoML (楼主) 1年前
kinyou

虚拟机加宝塔不香吗 ? 非要在windows上折腾

1年前 评论
DogLoML (楼主) 1年前
1年前 评论
DogLoML (楼主) 1年前

vagrant 装个centos7 不香吗

1年前 评论

我一直是添加 alias 的

alias php72='/d/phpStudy/PHPTutorial/php/php-7.2.1-nts/php'
alias php8='/d/phpStudy/PHPTutorial/php/php-8.1.17-nts/php'
1年前 评论
Rache1 1年前
忆往昔弹指间 (作者) 1年前

laragon 可以快速切

1年前 评论

你那个8.1是在哪里想下载的,为什么我找不到

1年前 评论
DogLoML (楼主) 1年前

linux 只要2g内存就可以用 docker :confused:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!