uptime!! v0.3

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

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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?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;
}
?>

◆ 実行結果
連続稼働時間:
アイドル時間:

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

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

コメントする

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

上へ参ります。