uptime!! v0.3

WordPressプラグインで管理ページ以外のところにフックを使ったことがなかったので、試しにthe_contentにフックしてみた。

とりあえず、記事に書かれた任意のhtmlコメントを置換してみることに。
“<!– uptime!!#uptime –>”で連続稼働時間
“<!– uptime!!#idletime –>”でアイドル時間

ま、実用性はないよねぇ…


<?php
/*
Plugin Name: uptime!!
Plugin URI: http://www.dazzlingworld2.com/post_4206.html
Description: サーバーの連続稼働時間、アイドル時間を表示する。
Version: 0.3
Author: だかね
Author URI: http://www.dazzlingworld2.com/
*/

/*
the_content にフック
*******************************************************************************/
add_filter('the_content', 'replace_posts', 10);

/* 記事に書かれたHTMLコメントを連続稼働時間または、アイドル時間に置き換える
   "<!-- uptime!!#uptime -->"   : 連続稼働時間
   "<!-- uptime!!#idletime -->" : アイドル時間
*******************************************************************************/
function replace_posts($contents) {
    if (eregi("<!--([[:space:]]*)uptime!!#(uptime|idletime)([[:space:]]*)-->", $contents)) {
        $uptime = get_uptime();
        $str_uptime = $uptime[0] . "日 " .
                      $uptime[1] . "時間 " .
                      $uptime[2] . "分 " .
                      $uptime[3] . "." .
                      $uptime[4] . "秒";
        $idletime = get_uptime(1);
        $str_idletime = $idletime[0] . "日 " .
                        $idletime[1] . "時間 " .
                        $idletime[2] . "分 " .
                        $idletime[3] . "." .
                        $idletime[4] . "秒";

        $contents = eregi_replace(
                            "<!--([[:space:]]*)uptime!!#uptime([[:space:]]*)-->",
                            $str_uptime,
                            $contents
                       );

        $contents = eregi_replace(
                            "<!--([[:space:]]*)uptime!!#idletime([[:space:]]*)-->",
                            $str_idletime,
                            $contents
                       );
    }
    return $contents;
}

/* 連続稼働時間を表示
*******************************************************************************/
function the_uptime() {
    $uptime = get_uptime();
    echo $uptime[0] . "日 " .
         $uptime[1] . "時間 " .
         $uptime[2] . "分 " .
         $uptime[3] . "." .
         $uptime[4] . "秒 ";
}

/* アイドル時間を表示
*******************************************************************************/
function the_idletime() {
    $idletime = get_uptime(1);
    echo $idletime[0] . "日 " .
         $idletime[1] . "時間 " .
         $idletime[2] . "分 " .
         $idletime[3] . "." .
         $idletime[4] . "秒 ";
}

/* 稼働時間またはアイドル時間を取得する。
     $sw = 0 : 稼働時間
     $sw = 1 : アイドル時間
*******************************************************************************/
function get_uptime($sw = 0) {
    $uptime     = array(0 ,0 ,0 ,0, 0);                     // 日時分秒㍉

    // 引数が0, 1以外の場合は終了する。
    if($sw != 0 && $sw != 1) return $uptime;

    // "/proc/uptime" から稼働時間(秒)を取得する
    unset($stdout);                                         // $stdoutを空にする
    exec('/bin/cat /proc/uptime', $stdout, $rcode);
    $proc_uptime = explode(" ", $stdout[0]);

    // 取得に失敗した場合は終了する。
    if($rcode) return $uptime;

    // 稼働時間(秒)を日時分秒㍉に変換
    $usec = explode(".", $proc_uptime[$sw]);
    $uptime[4] = $usec[1];                                  // ㍉
    $uptime[3] = $usec[0] % 60;                             // 秒
    $time = ($proc_uptime[$sw] - $uptime[3]) / 60;
    if($time > 0) {
        $uptime[2] = $time % 60;                            // 分
        $time = ($time - $uptime[2]) / 60;
    }
    if($time > 0) {
        $uptime[1] = $time % 24;                            // 時
        $time = ($time - $uptime[1]) / 24;
    }
    $uptime[0] = floor($time);                              // 日数

    return $uptime;
}
?>

◆ 実行結果
連続稼働時間:81日 17時間 49分 0.97秒
アイドル時間:158日 8時間 30分 5.68秒

コメント/トラックバック

この記事へのコメント/トラックバックはありません。

コメントする

(管理人にのみ公開されます)