PHP在linux下检测可用端口

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
/**
* 获取此刻设备上的已占用端口
* @return array 已占用端口列表
*/
function getUsedPort () {
$port_arr = [];
exec('netstat -tan', $result, $err);
if (!$err) {
foreach ($result as $i) {
$i = array_filter(explode(' ', str_replace(' ', ' ', $i)));
$p = ltrim(strrchr(next($i), ':'), ':');
if ($p) $port_arr[] = (int)$p;
}
} else {
return range(1, 65535);
}
return $port_arr;
}

/**
* 获取一个可用端口
* @return int 返回一个此刻设备上未被使用的端口, 返回0表示暂无可用端口
*/
function getValidPort () {
$port = 0;
$try = 0;
while (!$port || in_array($port, getUsedPort())) {
$port = mt_rand(1, 65535);
if ($try ++ > 10) return 0;
}
return $port;
}
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励