Skip to main content

前几天突然心血来潮想给自己的Cydia源添加查看现在已用流量的功能(因为我放在限制流量的VPS上)。此VPS使用的是SolusVM控制面板,我在查阅了SolusVM官方的文档后写了一段代码,下面就分享出来吧~~

准备工作

在使用SolusVM API前,需要获取API Key和API Hash。其实很简单,登入VPS的控制面板后,点击API选项卡,生成一个接口就可以了。

文档

在正式使用代码之前推荐查看SolusVM的官方文档,可以更加清晰地了解代码的作用,官方文档中也写了一些基本的应用代码等。
官方文档:http://docs.solusvm.com/client_api

PHP代码

curl

SolusVM API支持GET以及POST方式来使用。但是在大部分VPS中使用POST方式会失败,因此推荐使用GET方式(把参数写在url里)。同时,大部分SolusVM控制面板使用的是ssl连接,使用file_get_contents函数会报错,因此您的空间必须要支持curl。

以下是封装的curl获取数据函数,应该是比较完善的curl封装了:

function curlGet($url,$method='get',$data='',$cookie=''){
	$ch = curl_init();
	$header[] = "Accept-Charset: utf-8";
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	$temp = curl_exec($ch);
	return $temp;
}

从API获取数据

现在可以使用curl从API获取数据了。

基本参数:https://< 控制面板域名>:5656/api/client/command.php?key=&hash=&action=&=true
其中Flags为可选参数,Action名、返回的数据格式等具体的还是请看官方文档啦。在这里我要获取流量数据,所以最后的参数为bw=true

将数据转换为数组

只获取了数据还是不够的,并不能被PHP所使用,因此使用正则匹配将数据转换为数组,之后使用$result[参数名]就可以调用了。

preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $match);
$result = array();
foreach ($match[1] as $x => $y)
{
	$result[$y] = $match[2][$x];
}

变量赋值

现在我们获取的流量值还是一连串地保存在变量$result['bw']中,原始数据的格式为:<bw>total,used,free,percentused</bw>。所以我们要使用list函数将值分别赋值到变量中。

list($bwTotal, $bwUsed, $bwFree, $bwPercent) = explode(',', (strpos($result['bw'], ',')) ? $result['bw'] : '0,0,0,0');

单位转换

现在几乎接近成功啦!但是我们可以观察到,API返回的流量数值是一大串数字,单位是位(Bytes)。这么一大串的数字根本不便于观察嘛,因此我们还需要一段单位转换函数。

function displayBytes($bytes){
	$ext = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
	$unitCount = 0;
	for(; $bytes > 1024; $unitCount++) $bytes /= 1024;
	return round($bytes, 2) . ' ' . $ext[$unitCount];
}

使用

好了,至此只要再写一段输出代码就完成了。下面贴上一段我在源内使用的代码。

<p><strong>服务器本月</strong></p><p style="text-align: left;">已用流量: <?php echo displayBytes($bwUsed).' / '.displayBytes($bwTotal);?><br />剩余流量: <?php echo displayBytes($bwFree);?></p>
<div class="progress">
	<div class="bar" style="width: <?php echo $bwPercent;?>%;"><?php echo $bwPercent;?>%</div>
</div>
<p></p>

小结

以上代码的最终效果可以在源主页查看到哦~

SolusVM是十分方便的VPS控制面板,而且API功能真的十分人性化。SolusVM API能实现的功能并不止这么点,它还能无需登录就实现启动、关闭、重启、查看VPS状态等功能,能使用好它绝对能节省大量的时间啊~~不过其他的功能还是要自己看官方文档慢慢摸索喽。

Hintay

帝王鸽

2 条评论

发表评论

表情 图片 粗体 删除线 居中 斜体 下划线 段落引用 代码