利用PHP的Popen實現RRDTOOL作圖的動態輸出

近看瞭一下RRDTOOL如何作圖,語法確實比較繁瑣,但不是太難。命令行下執行的時候,每次都需要輸出成為一個文件。我們希望做一個應用,能夠動態生成圖表,看瞭看Cacti的實現方法,核心的部分就是使用瞭popen這個函數,將命令的輸出放到瞭管道中,然後循環讀取所有的數據,完成後,再以圖片的形式輸出到客戶端。這樣用戶就能夠看到動態的圖片而不需要進行物理的存儲瞭,下面是我截取的代碼段,供大傢參考。

error_reporting(E_ALL);

//作圖命令,註意看 graph 後面加瞭一個連接符
$command = '/opt/rrdtool/bin/rrdtool graph – –start=-86400 –end=-300 –title=Test –height=400 –width=800 DEF:value1="/home/echo/workspace/misc/tianjin_dpool_web_21_traffic_in_22.rrd":traffic_in:AVERAGE AREA:value1#ff0000 2>&1';

//測試管道符
session_write_close();

//用管道的方式執行命令,並且接收錯誤輸出
$handle = popen("$command 2>&1", 'r');
$read = '';
while (!feof($handle)) {
        $read .= fgets($handle, 4096);
}
pclose($handle);
echo $read;

// Set the proper headers to allow caching
$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:lonely blog

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *