8月 26, 2014

設定 Uniform Server 環境參數

Uniform Server Zero(UniServerZ) 是Windows環境下的 WAMP 組合,系統在設計上將所有組態檔安置在 \UniServerZ\home\us_config\ 目錄下。欲更改 Apache 所用連接埠與目錄見:us_user.ini 設定檔
[USER]
AP_PORT=8080
AP_SSL_PORT=8081
US_SERVERNAME=localhost
US_ROOTF_WWW=./www
US_ROOTF_SSL=./ssl
另個與存取相關的是:/www/.htaccess 中 Order Deny,Allow 範圍,記得把用戶IP位址加入。
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from "Client_IP"
若要調整 PHP 其他環境參數,見控制面板 [PHP]-[Edit Basic Configuration]
  • Display Errors:顯示除錯訊息
  • Memory
  • Post Size
  • Upload Size
若要啟用或停用內建模組則是 [PHP Modules Enable/Disable]
  • php_xdebug:除錯模組

8月 24, 2014

JpGraph - PHP上的繪圖函式庫

在 PHP 下的一套繪圖函式庫:JpGraph (An Object-Oriented Graph creating library)

字型參數:
  • 字型目錄定義:jpgraph.php
    預設使用函式庫路徑 /fonts 下的字型檔,備用是系統 /usr/share/fonts/truetype/
  • 字型名稱定義:jpgraph_ttf.inc.php
設定標題、X軸、Y軸字型大小:
$graph = new Graph(800,600);
$graph->title->SetFont(FF_ARIAL,FS_BOLD,24);
$graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,14);
$graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,14);
設定Y軸邊界(參考Graph類別手冊):
/* SetMargin($lef, $right, $top, $bottom) */
$graph->SetMargin(40,20,60,20);
配合讀入 csv 畫圖:
$dataArray = array();
$_gData = array();
$csvfile = fopen("diskusage.csv", "r");
while ( !feof($csvfile) )
{
  array_push( $dataArray, fgetcsv($csvfile) );
  $count++;
}
fclose( $csvfile );

for ($i=0; $i < $count-1; $i++)
{
  /* 取出橫列第5元素 存入一維陣列 */
  array_push( $_gData, round($dataArray[$i][4],2) );
}

/* setup the graph */  
$graph = new Graph(800,600);
$p1 = new LinePlot($_gData);
$graph->Add($p1);

/* Go */
$graph->Stroke();

8月 19, 2014

PHP 的 Session 使用方法

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>

  <body>
    <?php
    
      /*   Table           Field
         +--------------+----------+
         |counter       |pageview  |
         +--------------+----------+-----+
         |sessionTablew |sessionID |time |
         +--------------+----------+-----+
      */
    
      $dbuser = "xxxx";
      $dbpass = "xxxx";
      $dbname = "counter";
      
      $conn = mysql_connect( "localhost", $dbuser, $dbpass);
      if (!$conn)
        die ("connect fail");
      mysql_query("SET NAMES 'utf8'");
      mysql_select_db($dbname, $conn);
      
           
      session_start();
      $_sessionID = session_id();

      $queryString = "SELECT * from sessionTable where sessionID='{$_sessionID}'" ;
      $rowCount = mysql_num_rows( mysql_query($queryString, $conn) );
      
      if ( $rowCount == 0 )  /* here comes new visitor */
      {        
        $datetime = date("Y-m-d, H:i:s");
        
        $queryString ="insert into sessionTable values ('{$_sessionID}', '{$datetime}')";
        mysql_query($queryString, $conn);
        
        $queryString = "SELECT * FROM counter ORDER BY pageview DESC";       
        $row = mysql_fetch_array( mysql_query($queryString, $conn) );
        
        $ori = $row['pageview'] ;
        $ori_plus = $ori +1 ;
        
        $queryString ="update counter set pageview='{$ori_plus}' where pageview='{$ori}'";
        mysql_query($queryString, $conn);
        echo "visitor:".$ori_plus;
      }
     
    ?>  
  </body>
</html>

8月 11, 2014

Web-based file upload module

幾個檔案上傳的前端網頁模組,均可搭配 PHP 使用:
  1. Uploadify
  2. Plupload
  3. jQuery File Upload Plugin (開發者 blueimp)
後來選了 Uploadify 這個 Flash 外掛工具來開發系統,主要有幾個特點:
  • 手冊 API 清楚完整,常用功能均有實作
  • 範例程式簡短易讀且能正常運作
  • 支援檔案格式與檔案大小過濾功能

8月 10, 2014

在 Debian 上架設 Cacti 流量觀測系統

有關 Cacti 的介紹請見官方網站,該開源專案發展至今已逾十個年頭,算是穩定且被廣泛使用的專案程式。原以為在 Linux 環境下要把 Cacti 跑起來應該很麻煩,加上缺乏硬體設備可以測試,所以每次想到就算了。

幾個概念性的重點:
  1. 因為 Cacti 是網頁,所以需要 PHP 與 MySQL 環境運作
  2. 底層透過 Snmpwalk 取得(網路)硬體資訊
  3. 在 Cacti 中有隻 poller.php 要列入排程(cron)更新資料庫
安裝各項套件:

1. 安裝 SNMP 與 RRDTool 套件
# apt-get install snmp php5-snmp rrdtool
2. 測試 snmpwalk 能否正常運作
# snmpwalk -c [Community_String] -v 2c [Device_IP]
# snmpwalk -v 3 -u [USER-NAME] -a [MD5|SHA] -A [PASSPHRASE] [DEVICE_IP] [MIB]
3. 至 Cacti 官方網站取得壓縮包 (目前版號是 0.8.8b)
# wget http://www.cacti.net/downloads/cacti-0.8.8b.tar.gz
4. 在 MySQL 中開個資料庫給 Cacti 使用
# mysqladmin -u root -p create cacti 
4. 匯入DB架構(★重要★)
# mysql -u root -p -A cacti < cacti.sql
5. 修改 Cacti 的設定檔 ( cacti/include/config.php )
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "...";
$database_password = "...";
6. 讓 RRDTool 的圖顯示中文( cacti/lib/functions.php )
在最開頭加入 setlocale(LC_CTYPE,"zh_TW.UTF-8");
7. 加入系統排程 (新增 /etc/cron.d/updateCacti)
# Update every 5mins
*/5 * * * * root php /var/www/cacti/poller.php > /dev/null 2>&1
完成以上基礎設定後,正常來說 Cacti 就能開始運作,登入網頁管理介面(初始帳號密碼均為admin),將目的設備加入觀察清單。
  1. 新增設備:Devices / Add
  2. 圖表分組:Graph Trees / Default Tree / Add / Tree Item Type 要選 Host

*************************************************
(待補充 plug-in 模組)

7月 25, 2014

Parsing X509 Certificate

臺灣發行的自然人憑證 IC 卡使用 X.509 標準格式,所以只要讓使用者讀出憑證後,丟到後端由 PHP 剖析,即可獲取卡片基本資訊。像是卡片持有人姓名、序號、發行單位(通常是內政部憑證管理中心)與身份證末四碼。

在 PHP 上有個開源專案 phpseclib 可以輕鬆完成 X.509 憑證解析(Parser)這件事。試著把自己的憑證丟進去測試,幾個比較重要的欄位都有解出來。

phpseclib: X.509 Decoder

函式的使用方法:
include('File/X509.php');
$X = new File_X509();
$cert = $X->loadX509(__CERTIFICATE-HERE__);

持卡人姓名:
$cert['tbsCertificate']['subject']
['rdnSequence'][1][0]['value']['utf8String']

發行單位名稱:
$cert['tbsCertificate']['issuer']
['rdnSequence'][2][0]['value']['utf8String']

7月 17, 2014

Sony NEX-5T

手機拍照品質愈來愈好,輕便又能隨時分享資訊,傳統相機的定位因此弱化。不過拍了數年的爛照片後發現,手機即使再方便,成相品質仍遠不如一般相機。Sony NEX-5T 的價格在這陣大概已經探底,一萬四含kit鏡頭,扣除鏡頭定價,機身成本大約就只有一萬出頭。不買可惜,買了也可惜…。

可惜的點:
  1. 鏡頭變焦環感覺有點脆弱,手持機身時常會不小心勾到。
  2. 相機握把仍舊太小,與昔日所用單眼相差甚大。
  3. 台北水貨商的定價雖然比南部便宜,但配件亂買一通被貴到了。
先用一陣子再說,如果還有下臺相機,應該會直攻更高階的機種 XD

7月 13, 2014

Shower - 用 HTML 製作教學投影片

在比較過數種 HTML/JS Presentation Frameworks 後,Shower這個框架(Shower HTML presentation engine)感覺最棒,設計風格簡單且不會讓讀者看到暈頭轉向,內附的範本也很美觀實用。

7月 06, 2014

Mikrotik RouterBOARD 路由器

如果只是單純的網通設備那就沒什麼好提的,但 Mikrotik 出廠的設備除了功能強大外,價格也出奇低廉。硬體 RouterBOARD 產品線,搭配自有作業系統 RouterOS。雖然說穿了就是臺跑 Linux 的嵌入裝置,不過支援的通訊協定可說包山包海,小自PPPoE連線,大到OSPF路由協定通吃。

6月 30, 2014

網路流量(事件)監測套件

幾個監測網路流量、事件的套件
  • Cacti (易上手Linux與MySQL環境)
  • OpenNMS (環境要搭配PostgreSQL與Java)
  • Zabbix
  • Nagio
  • Observium