#!/usr/bin/php
// php-version 这个脚本放入~/bin目录下.
// TODO: 如果没有 ~/bin/目录 那么建一个
// $PATH中增加 ~/bin/目录
// 获取调用参数
if(!empty($argv)){
$toVer = $argv[1];
}
$path = "/usr/local/Cellar/";// 这个是brew安装php版本路径,注意需要手动在php目录下软连接bin目录
$phps = array();
$files = scandir($path);
// 2. 执行以下,把可用版本号和对应路径放入数组
foreach ($files as $name) {
if (preg_match('/php@[0-9]{1}\.[0-9]{1}$/',$name)) {
foreach (scandir("{$path}{$name}") as $v) {
if (preg_match('/[0-9].*?[0-9]$/', $v)) {
$phps[] = "{$path}{$name}/{$v}/bin/php";//绝对路径 /bin/php
}
}
}
}
$list = [];
foreach ($phps as $phpBin) {
$ver = getVersionNumber($phpBin);
$list[$ver] = $phpBin;
}
// 一个都没有,可能是上面$path路径错了.那么直接给一个提示
if(empty($list)){
echo "\033[31m {$path} 目录下没有找到php@7.0这样的目录.请检查! \033[0m\n";
die;
}
// 3. 获取当前php的版本
$currentPHP = exec("which php");
$currentPHP = getVersionNumber($currentPHP);
if(is_null($toVer)){
// 执行命令: php-version
// 显示当前php版本,和列表:
// 5.4
// * 7.0
// 7.2
// 4. 显示出来
foreach ($list as $ver => $path) {
if($ver == $currentPHP){
echo "\033[47;30m* {$ver} \033[0m \n";//白底黑字
}else{
echo "\033[32m {$ver} \033[0m\n";// 绿字
}
}
}else{
// 切换版本
// 执行命令: php-version 70
// 检查是否存在版本?
if(array_key_exists($toVer, $list)){
// 通过下面命令,完成切换版本:
exec("ln -sf {$list[$toVer]} ~/bin/php");
}else{
echo "\033[31m 找不到php版本{$toVer} \033[0m \n";
die;
}
}
// 传php bin文件绝对路径,返回php版本号
function getVersionNumber($phpBin='')
{
// 多行返回放入数组
exec("{$phpBin} -v", $output);
// 正常只关心第一行.
preg_match("/\d+\.\d+/", $output[0], $match);
return $match[0];
}
这篇博客介绍如何在Unix/Linux环境下使用Brew来管理和切换PHP的不同版本。首先,确保~bin目录存在并添加到$PATH中,然后遍历/usr/local/Cellar/目录查找所有PHP版本,将它们与对应的路径存入数组。接着,获取当前PHP版本并与列表对比,展示所有可用版本。如果用户指定要切换的版本,脚本会进行版本切换。这是一个方便开发者在多个PHP版本间快速切换的实用工具。
1468

被折叠的 条评论
为什么被折叠?



