日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php流量图形化,用php引用cacti中的网络流量图表

發布時間:2024/3/26 php 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php流量图形化,用php引用cacti中的网络流量图表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。它通過snmpget來獲取數據,使用 RRDtool繪畫圖形,而且你完全可以不需要了解RRDtool復雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結 構、host以及任何一張圖,還可以與LDAP結合進行用戶驗證,同時也能自己增加模板,功能非常強大完善。

在管理系統中,已經實現了設備上下架功能,可以按機柜來查看機柜中的設備,但有一個缺憾就是設備的流量圖設置在cacti系統中,要想看設備流量圖還要切換到cacti中查看。若是能直接在管理系統中,選中設備就能查看該設備的cacti流量圖就更好了,并且可以按時間查詢,就象使用cacti一樣。出于這個目的,我使用PHP的curl擴展實現了此功能。

要實現引用cacti的流量圖表,先要分析cacti圖表的鏈接。仔細觀察cacti圖表,發現流量圖鏈接有個特點。

http://xxx.xxx.xxx.xxx/cacti_cnc/graph_image.php?local_graph_id=2068&rra_id=0&graph_start=1282207985&graph_end=1282553585

可以發現,cacit圖的鏈接有兩個關鍵的參數,一個是graph_id,一個是rra_id,graph_id不必說,是設備流量圖的標識碼,rra_id是什么呢?其實是流量圖的類型。

當rra_id=all時,查看該設備的所有流量圖

當rra_id=0時,可以按任意時間段查看流量圖均值。

當rra_id=1時,查看最近一天的流量圖均值

當rra_id=2時,查看最近一周流量圖均值。

當rra_id=3時,查看最近一月流量圖均值。

當rra_id=4時,查看最近一年流量圖均值。

注意到,當rra_id=0時,只要給出時間段參數,就可以得到任意范圍的流量圖。于是,查看設備流量圖,就可以從rra_id=0下手。

要查看設備流量圖,必須有個地方保存流量圖的url。經過考慮,我把URL保存在設備IP表中(在設備IP表上添加一個字段)。保存的url不包含最后&graph_start及graph_end這兩個參數,這兩個參數值我在界面上傳入。另外要查看cacti的圖表,必須先登錄。

經過分析后,思路就變得簡單了:

登錄cacti

傳入url,返回結果

用個來指向這個結果就可以顯示了。

由于cacti是要驗證session的,而且登錄成功后,會寫一串cookie,所以要拿到流量圖URL,先得保存cookie。

php的curl擴展允許保存cookie,并且允許用保存下來的cookie再次請求。這是解決問題的關鍵。核心代碼如下:

//getChart.php

$graph_start = $_REQUEST['graph_start'];

$graph_end = $_REQUEST['graph_end'];

$url= $_REQUEST['chart_url'];

$url = url_decode($url);

$username= "xxxxxx";

$password = "xxxxxx";

$data = "&action=login&login_username=" . $username . "&login_password=" . $password;

$cookie_file = tempnam ( './tmp', 'cookie' );

$curl = curl_init (); // 啟動一個CURL會話

curl_setopt ( $curl, CURLOPT_URL, $url); // 要訪問的地址

curl_setopt ( $curl, CURLOPT_USERAGENT, $_SERVER ['HTTP_USER_AGENT'] ); // 模擬用戶使用的瀏覽器

curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自動跳轉

curl_setopt ( $curl, CURLOPT_AUTOREFERER, true ); // 自動設置Referer

curl_setopt ( $curl, CURLOPT_POST, true ); // 發送一個常規的Post請求

curl_setopt ( $curl, CURLOPT_COOKIEJAR, $cookie_file ); //保存cookie

curl_setopt ( $curl, CURLOPT_COOKIEFILE, $cookie_file ); //發送cookie

curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的數據包

curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 設置超時限制防止死循環

curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 顯示返回的Header區域內容

curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 獲取的信息以文件流的形式返回

curl_exec ( $curl ); // 執行操作

if (curl_errno ( $curl )) {

echo "error";

} else {

if(!empty($graph_start)) $url .= "&graph_start=".$graph_start;//附上起始時間

if(!empty($graph_end)) $url .= "&graph_end=".$graph_end;//附上結束時間

curl_close ( $curl ); // 關閉CURL會話

$ch2 = curl_init ();

curl_setopt ( $ch2, CURLOPT_URL, $url );

curl_setopt ( $ch2, CURLOPT_HEADER, false );

curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt ( $ch2, CURLOPT_COOKIEFILE, $cookie_file );

$img = curl_exec ( $ch2 );

curl_close ( $ch2 );

echo $img;//輸出流量圖

}

unlink ( $cookie_file );

showchart.php

$url = url_encode("http://xxx.xxx.xxx.xxx/cacti_cnc/graph_image.php?local_graph_id=2068&rra_id=0");

echo '

';

?>

以上代碼只是核心示意性代碼,界面上的元素比如傳遞時間參數,本文中為了突出重點內容,沒有提及。

總結

以上是生活随笔為你收集整理的php流量图形化,用php引用cacti中的网络流量图表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。