在使用 Windows 系统进行 PHP 开发时,经常遇到一个问题:不同的应用或项目需要不同版本的 PHP 环境。每次切换 PHP 版本都是一件麻烦的事情,而且稍不注意就可能引发版本冲突或者配置错误。于是,我开始思考,是否能在 Windows 的命令行下实现多版本 PHP 的共存,就像 Linux 下的快捷方式那样方便切换呢?
首先,我尝试将所有的 PHP 目录都添加到环境变量中。但很快我就发现这行不通,因为每个 PHP 版本都有一个名为 php.exe
的可执行文件,环境变量最终只能识别一个有效的 php.exe
。直接修改文件名也不太合适,一方面这样做可能会影响到 PHP 目录内的其他文件和配置,另一方面,每次切换版本都要改名,实在是太麻烦了。
接着,我尝试创建不同名字的快捷方式,将每个版本的 php.exe
都指向一个特定的快捷方式,并将这些快捷方式放在一个统一的目录中,然后再将这个目录添加到环境变量中。但遗憾的是,命令行并不能直接识别快捷方式作为可执行程序。
那么,怎么办呢?我灵机一动,想到了创建批处理文件(.bat)的方法。每个批处理文件都用来调用对应版本的 PHP。经过测试,我写出了如下的批处理代码(以 php72.bat
为例):
@"G:\php\72" %*
这里的 @
符号是用来屏蔽批处理文件本身的调用信息的,这样命令行就不会显示多余的转调信息,看起来就像直接调用 php.exe
一样。
后面的 "G:\php\81"
是对应版本 PHP 的完整路径,注意这里我使用的是 PHP 8.1 的路径作为示例,实际上你需要替换成你实际安装的 PHP 7.2 的路径。%*
则是一个特殊的参数,它表示将命令行中传递给批处理文件的所有参数都传递给 php.exe
。
然后,我为每个需要用到的 PHP 版本都创建了一个这样的批处理文件,并将它们放在同一个目录中。最后,我将这个目录添加到了环境变量中。
现在,每次在命令行中想要使用特定版本的 PHP 时,只需要输入对应的批处理文件名就可以了。比如,要使用 PHP 7.2,就输入 php72
;要使用 PHP 7.4,就输入 php74
,以此类推。命令行会自动调用对应版本的 PHP,并传递所有必要的参数。
通过这种方法,我成功地在 Windows 的命令行下实现了多版本 PHP 的共存。不仅切换版本变得更加方便,而且每个版本之间也不会互相干扰,大大提高了开发效率。