ホームページ  >  記事  >  バックエンド開発  >  rrd.so の更新により、rrd_fetch の戻り値が変更され、古いバージョンと互換性がなくなりました_PHP チュートリアル

rrd.so の更新により、rrd_fetch の戻り値が変更され、古いバージョンと互換性がなくなりました_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:52:371136ブラウズ

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(1341834300)

["終了"]=> 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

tru​​e

http://www.bkjia.com/PHPjc/478110.html

技術記事

2 日前、PHP の rrd 拡張機能を古いバージョンの rrdtool.so から最新の rrd.so にアップグレードしました。しかし、それを使用していると、主に count($ の設定が原因で) 多くの関数の呼び出し方法が変更されていることがわかりました。オプト) はキャンセルされました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。