php rrd update,rrd.so更新导致rrd_fetch返回值变更,与旧版不兼容

前两天把php的rrd extension从旧版本的rrdtool.so升级到了最新的rrd.so

但是使用时发现很多函数的调用方式都变了,主要是都取消了count($opts)的配置,比如rrd_create、rrd_fetch、rrd_update等函数

原本都是( string $filename , array $options , count($opts))三个参数,现在都简化成了( string $filename , array $options)两个参数

但头疼的是rrd_fetch这个函数的返回值格式整体都变掉了,导致和已有的代码完全不一样。

新的rrd.so中,rrd_fetch返回值:

[php]

array(4) {

["start"]=>

int(1341834300)

["end"]=>

int(1341834600)

["step"]=>

int(300)

["data"]=>

array(2) {

["ds0"]=>

array(1) {

[1341834600]=>

float(29875732.323333)

}

["ds1"]=>

array(1) {

[1341834600]=>

float(139478395.26667)

}

}

}

旧的rrdtool.so中,rrd_fetch返回值:

[php]

array(6) {

["start"]=>

int(1341834300)

["end"]=>

int(1341834600)

["step"]=>

int(300)

["ds_cnt"]=>

int(2)

["ds_namv"]=>

array(2) {

[0]=>

string(3) "ds0"

[1]=>

string(3) "ds1"

}

["data"]=>

array(2) {

[0]=>

float(1073.00666667)

[1]=>

float(32.9566666667)

}

}

[php]

[2011-03-02 04:26 UTC] koubel at seznam dot cz

thank you, rrd_fetch rewritten, there were a bug in filling the returned array. Nowadays all data sources are supported (trunk code). I made a litte bit BC break, no more ds_cnt, ds_namv keys in result array from fetch. I think these are completely useless.

大神觉得ds_cnt、ds_namv这两个参数完全没用,并且还修改了data的返回格式

好吧,新的rrd_fetch确实挺简单,而且还有了数据对应的时间,非常方便,但是过渡阶段怎么办呢?原始系统没办法瞬间改完,但后台rrd已经升级完了,没办法,只好先搞个临时解决方案

[php]

#旧版本的rrd_fetch返回格式与新版本不同,过渡阶段需要用下面的函数将新版本rrd_fetch的返回值,改成旧版本的格式,才能兼容旧版本代码

function my_rrd_fetch($file_path, $opts , $count = 0) {

$ret = rrd_fetch($file_path, $opts);

if(!$ret)

return false;

$start = $ret['start'];

$end = $ret['end'];

$step = $ret['step'];

$ds_cnt = 0;

$ds_namv = array();

$data = array();

$tmpdata = array();

foreach($ret['data'] as $key => $values) {

$ds_namv[] = $key;

$ds_cnt++;

foreach($values as $time => $value) {

$tmpdata[] = $value;

} www.2cto.com

}

$count = count($tmpdata);

for($i = 0; $i < ($count/2); $i++){

$data[] = $tmpdata[$i];

$data[] = $tmpdata[$i + ($count/2)];

}

return array('start' => $start, 'end' => $end, 'step' => $step, 'ds_cnt' => $ds_cnt, 'ds_namv' => $ds_namv, 'data' => $data);

}

用上面的my_rrd_fetch来替换以前的rrd_fetch,功能就是将新版的rrd_fetch的返回值改成旧版的返回,用于临时兼容旧版本代码...

当然后期还是要慢慢的都改成新函数才可以...

作者:Liv2005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值