首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

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

2012-08-14 
rrd.so更新导致rrd_fetch返回值变更,与旧版不兼容前两天把php的rrd extension从旧版本的rrdtool.so升级到

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

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


附:
旧版本的rrdtool.so (php_rrdtool.tar.gz )下载地址:http://oss.oetiker.ch/rrdtool/pub/contrib/
新版本的rrd.so下载地址:http://pecl.php.net/package/rrd


但是使用时发现很多函数的调用方式都变了,主要是都取消了count($opts)的配置,比如rrd_create、rrd_fetch、rrd_update等函数
原本都是( string $filename , array $options , count($opts))三个参数,现在都简化成了( string $filename , array $options)两个参数


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




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

#旧版本的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;}}$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的返回值改成旧版的返回,用于临时兼容旧版本代码...


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

热点排行