<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?PHP
/*************************************************************************************************
    Name:ftpwho/index.php

    Action:現在のftp接続中ユーザステータスを表示。

                                2008. 1. 7 Ver.0.01  Genki wrote

    Spec.
    Ver.0.01    とりあえず。

***************************************************************************************************/
//各種設定
$flag_table true;    //テーブル出力するかどうか。

/************ HTMLヘッダ出力 **************/
echo <<<EOH
<html>
<head>
<meta http-equiv="Content-Type" content="text/php; charset=euc-jp">
<link rel="stylesheet" href="../main.css" type="text/css">
<title>
FTP status on Genkikko Server
</title>
</head>
<body bgcolor="#CCCCCC">
<b>FTP status on Genkikko Server</b><br>
EOH;
/************ HTMLヘッダここまで **************/

$str = `ftpwho`;            //FTPサーバの情報ゲト
$str explode("\n",$str);        //行ごとに配列に格納

$pid strrchr($str[0],"[");        //1行目からメインプロセスのPID取得
$pid substr($pid,1,strpos($pid,"]")-1);

$uptime strrchr($str[0],"up for");    //1行目からuptime取得

/**** 各プロセスの情報を2次配列に格納 ****/
for($i=1;$i<100;$i++){
    if(
eregi("Service class",$str[$i])){    //これが出たら最後の行
        
$users explode(" ",$str[$i]);    //スペースで分割して
        
$n sizeof($users);
        
$users "{$users[$n-2]} {$users[$n-1]}";    //最後の二つを取得。
        
break;                //forループやめ。
    
}elseif($str[$i] == "no users connected"){    //これが出たらユーザなし。
        
$flag_table false;        //テーブル表示フラグ消して
        
break;                //fotループやめ。
    
}
    while(
ereg("  ",$str[$i])){
        
$str[$i] = str_replace("  "," ",$str[$i]);    //スペースの連続を取り除いて
    
}
    
$str[$i] = str_replace("[ ","[",$str[$i]);        //接続時間の幅そろえのスペース除去
    
$str[$i] = str_replace("( ","(",$str[$i]);        //パーセンテージの幅そろえの(略
    
$str[$i] = ltrim($str[$i]," ");                //左端のスペース除去
    
$str[$i] = explode(" ",$str[$i]);            //2次配列に分解
    
$str[$i][2] = ltrim($str[$i][2],"[");            //余分な
    
$str[$i][2] = rtrim($str[$i][2],"]");            //カッコを
    
$str[$i][3] = ltrim($str[$i][3],"(");            // 除
    
$str[$i][3] = rtrim($str[$i][3],")");            // 去
    
if($str[$i][4] == "idle"){                //アイドルのときは
        
$str[$i][3] = "n/a";                //%を表示しない
    
}
}

/******** BODYここから ********/
echo "proftpd main process $pid<br />\n",    //PIDと
     
"$uptime<br />\n";                //uptimeを表示

/**** TABLE表示ここから ****/
if($flag_table){
    echo 
"online $users<br />\n",        //接続ユーザ数を表示
         
"<table border=1>\n",
         
" <tr><th>pid</th><th>user</th><th>uptime</th>",
         
"<th>%</th><th>cmd</th><th>file</th></tr>\n";    //見出し。
    
for($j=1;$j<$i;$j++){                    //ユーザ数分だけ繰り返し
        
echo "<tr>";
        for(
$k=0;$k<=5;$k++){
            if(
$str[$j][$k]){
                echo 
"<td>{$str[$j][$k]}</td>";
            }else{
                echo 
"<td align=\"center\">n/a</td>";    //空のセルはn/a入れる
            
}
        }
        echo 
"</tr>\n";
    }
    echo 
"</table>";
/**** TABLEここまで ****/
}else{    //table表示フラグ消えてるとき。
    
echo $str[$i];
}
/************ HTMLフッタ出力 **************/
echo "<hr />\n<a href=\"../\">back</a>\n",
     
"</body>\n</html>\n";
?>