-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathphp-version
executable file
·90 lines (73 loc) · 2.48 KB
/
php-version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/php
<?php
// 还是用我自己最熟悉的php吧! 确保 /usr/bin/php有php执行程序,如果没有,请自己更换一个当前的绝对路径. 使用: which php即可.如果php都没装,那也不用切换php版本了.
// php-version 这个脚本放入~/bin目录下.
// TODO: 如果没有 ~/bin/目录 那么建一个
// $PATH中增加 ~/bin/目录
// 获取调用参数
if(!empty($argv)){
$toVer = $argv[1];
}
// 1. 在 opt/local/bin文件夹下,查找php版本
// $path = "/usr/local/Cellar/";// 这个是brew安装php版本路径,注意需要手动在php目录下软连接bin目录. (如果你不明白做什么就别用这个了.自己处理也不复杂.如果有更好的办法麻烦给我pr)
$path = "/opt/local/bin/";// 这个是port 安装php版本路径. 我这个项目是用这个安装的,所以默认在这里.
$files = scandir($path);
$phps = array();
// 2. 执行以下,把可用版本号和对应路径放入数组
foreach ($files as $name) {
if (preg_match('/php[0-9]{2}$/',$name)) {
$phps[] = "{$path}{$name}";//绝对路径 /bin/php
}
}
$list = [];
foreach ($phps as $phpBin) {
$ver = getVersionNumber($phpBin);
$list[$ver] = $phpBin;
}
// 一个都没有,可能是上面$path路径错了.那么直接给一个提示
if(empty($list)){
echo "\033[31m {$path} 目录下没有找到php70这样的目录.请检查! \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)){
// 通过下面命令,完成切换版本:
// 执行 ln -sf ~/bin/php /opt/local/bin/php70
// 执行 ln -sf ~/bin/php /opt/local/bin/php54
// 执行 ln -sf ~/bin/php /opt/local/bin/php72
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+){1}/", $output[0], $match);
// var_dump($match);die;
return $match[0];
}