RRDTOOL がどのように画像を描画するのかを詳しく調べてみました。構文は確かに面倒ですが、それほど難しいことではありません。コマンドラインから実行する場合は、毎回出力をファイルにする必要があります。 Cacti の実装方法を確認した後、コア部分はコマンドの出力をパイプラインに入れ、ループですべてのデータを読み取ることです。完了後、クライアントに画像として出力します。このようにして、ユーザーは物理的なストレージを必要とせずに動的な画像を表示できます。参考までに、私が抜粋したコード スニペットを以下に示します。
エラー報告(E_ALL);
//グラフ作成コマンド。グラフの後にコネクタが追加されていることに注意してください
$command = '/opt/rrdtool/bin/rrdtool グラフ - --start=-86400 --end=-300 --title=テスト --height=400 --width=800 DEF:value1="/home/echo /workspace/misc/tianjin_dpool_web_21_traffic_in_22.rrd":traffic_in:平均エリア:value1#ff0000 2>&1';
//パイプ文字をテストします
session_write_close();
//パイプライン経由でコマンドを実行し、エラー出力を受け取ります
$handle = Popen("$command 2>&1", 'r');
$read = '';
while (!feof($handle)) {
$read .= fgets($handle, 4096);
}
pclose($handle);
エコー $read;
// キャッシュを許可するために適切なヘッダーを設定します
$this->request->headers['Content-Type'] = File::mime_by_ext('png');
$this->request->headers['Content-Length'] = strlen($read);
$this->request->headers['Last-Modified'] = date('r', time());
from:孤独なブログ