2日前にphpのrrd拡張機能を古いバージョンのrrdtool.soから最新のrrd.soにアップグレードしました
しかし、実際に使ってみると、rrd_create、rrd_fetch、rrd_update、その他の関数など、count($opts)の設定がキャンセルされていることが主な原因で、多くの関数の呼び出し方法が変更されていることが分かりました
元々は 3 つのパラメーター (string $filename、array $options、count($opts)) がありましたが、現在は 2 つのパラメーター (string $filename、array $options) に簡略化されています
しかし、厄介なのは、rrd_fetch関数の戻り値の形式が全体的に変更されており、既存のコードとは全く異なってしまっていることです。
新しい rrd.so では、rrd_fetch の戻り値:
[php]
配列(4) {
["開始"]=>
int(1341834300)
["終了"]=>
int(1341834600)
["ステップ"]=>
int(300)
["データ"]=>
配列(2) {
["ds0"]=>
配列(1) {
[1341834600]=>
フロート(29875732.323333)
}
["ds1"]=>
配列(1) {
[1341834600]=>
フロート(139478395.26667)
}
}
}
古い rrdtool.so では、rrd_fetch の戻り値:
[php]
配列(6) {
["終了"]=> int(1341834600)
["ステップ"]=> int(300)["ds_cnt"]=> int(2)
["ds_namv"]=> 配列(2) {
[0]=>
文字列(3) "ds0"
[1]=>
文字列(3) "ds1"
}
["データ"]=>
配列(2) {
[0]=>
フロート(1073.00666667)
[1]=>
float(32.9566666667)
}
}
[php]
[2011-03-02 04:26 UTC] seznam dot cz のコウベル
ありがとう、rrd_fetch が書き直されました。返された配列を埋める際にバグがありました。現在、すべてのデータ ソースがサポートされています (トランク コード)。フェッチからの結果配列に ds_cnt キーと ds_namv キーが追加されなくなりました。全く役に立たない
マスターは、ds_cnt と ds_namv の 2 つのパラメーターがまったく役に立たないと感じ、データの戻り形式も変更しました
さて、新しい rrd_fetch は確かに非常にシンプルで、データ対応時間もあり、非常に便利ですが、移行段階はどうなるのでしょうか?元のシステムはすぐには変更できませんが、バックグラウンドのrrdはアップグレードされているので、まずは一時的な解決策を見つけるしかありません
。
[php]
#rrd_fetch の古いバージョンの戻り値は新しいバージョンと異なります。移行段階では、次の関数を使用して、rrd_fetch の新しいバージョンの戻り値を古いバージョンの形式に変更する必要があります。古いバージョンのコードと互換性がある
関数 my_rrd_fetch($file_path, $opts , $count = 0) {
$ret = rrd_fetch($file_path, $opts);
もし(!$ret)
false を返します
$start = $ret['start']
$end = $ret['end']
$step = $ret['ステップ']
$ds_cnt = 0;
$ds_namv = 配列();
$data = 配列();
$tmpdata = 配列();
foreach($ret['data'] as $key => $values) {
$ds_namv[] = $key;
$ds_cnt++;
foreach($values as $time => $value) {
$tmpdata[] = $value;
www.2cto.com
}
$count = カウント($tmpdata);
for($i = 0; $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 ' => $データ);
}
以前の rrd_fetch を上記の my_rrd_fetch に置き換えます。この関数は、古いバージョンのコードとの一時的な互換性を保つために、新しいバージョンの rrd_fetch の戻り値を古いバージョンの戻り値に変更することです...
もちろん、後でゆっくりと新しい機能に変更する必要があります...
作者: Liv2005
http://www.bkjia.com/PHPjc/478110.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/478110.html