たまにはチェック

たまにはAnother HTML-lint gatewayでチェックしてみる。

98点だった。

さて、修正するか。

WordPressに403を

WordPressはテーマに404.phpがあると、404エラーの時404ページを表示してくれる。

/index.php?error=404

上記にアクセスすると、404ページが表示されるわけだが…
?error=404ってどう見てもGETパラメータである。
ということは、だ。
403にしたら、403ページが表示できるようになるんじゃないか?

こっち見んな!

WordPressの管理ページがある/wp-adminに機械的にアクセスがあったので拒否る事にする。

/wp-admin以下に.htaccessを設置する。
そして中身を下記のようにする。

1
2
3
4
AllowOverride   Limit
Order           Deny,Allow
Deny from       All
Allow from      127.0.0.1 203.135.

1行目でアクセス制御を行うディレクティブ(Order, Allow, Deny)を有効にする。
2行目でAllow(許可)とDeny(拒否)のどちらを先に評価するか設定。
3行目で全て拒否。
4行目で許可するIPを設定。
上記では127.0.0.1(ループバックアドレス)と203.135.???.???を許可する。

許可されてないIPで接続して、403ページが表示されたらおk。
っていうけど、許可されてないIPから接続するのって意外と難しいよね。
ホームページテスト【外部からの表示確認】
とかで確認するといいかも。

Logwatchが来なくなった!

サーバーの日々の診断書的なLogwatchが来なくなった。

cron.dailyにちゃんと入れてるので毎日動いてくれるはず何だけれど、何故か動かない。
てことで、cronのログを見てみた。

1
2
3
# less /var/log/cron
May 23 22:01:01 xxx anacron[22051]: Job `cron.daily' locked by another anacron - skipping
May 23 22:01:01 xxx anacron[22051]: Normal exit (0 jobs run)

おやー?
「今動いてるからロックされてるよ。スキップするね。」的なメッセージが…

今 動 い て る だ と ?

1
2
3
4
5
6
7
# ps aux | grep cron
root      3905  0.0  0.0 106956   884 pts/0    SN+  19:19   0:00 grep cron
root     10936  0.0  0.0 111956  1268 ?        SNs  May23   0:00 crond
root     19192  0.0  0.0  14532   920 ?        SNs  May23   0:00 /usr/sbin/anacron -s
root     19681  0.0  0.0   9100  1140 ?        SN   May23   0:00 /bin/bash /usr/bin/run-parts /etc/cron.daily
root     21888  0.0  0.0   9100  1096 ?        SN   May23   0:00 /bin/bash /etc/cron.daily/clamav.sh
root     21889  0.0  0.0   8952   740 ?        SN   May23   0:00 awk -v progname /etc/cron.daily/clamav.sh progname {?????   print progname ":\n"?????   progname="";????       }????       { print; }

clamav.shで止まってるっぽいね。
clamav.shって、ウイルススキャンなんすけど…
とりあえず、普通にスキャンしてみる。
と、その前にclamav.sh殺しておこうかな。

# kill 21888

殺したら後続のが動いた。
で、普通にスキャン。

LibClamAV Warning: fmap_readpage: pread fail: asked for 4094 bytes @ offset 2, got 0

こんなメッセージが/sysでたくさん出て止まった…
CPU使用率100%になったまま…

preadのエラーかな?
ちなみに、clamdのヴァージョンは0.96.1
ちょろっと検索してみたけど、解決策はないみたいで…
ヴァージョンアップ待ちだってさ。

仕方ないので/sysをスキャンから除外。

WPAdsを使わない時のために

広告等をランダム表示できるプラグインWPAdsをテーマに組み込んでいて、その組み込んだゾーンが空になった場合、何も出力されなくなるので、空divになってしまったり、テーマが崩れる事があるので、その対策。

wpadsはprint文が書いてあるだけなので、wpadsの中で呼んでるget_wpadsを使う。
get_wpadsだとhtmlを返してくれるので、これを変数に入れてissetで中身が入ってるかどうかがわかる。

うちの場合はこんな感じ。

1
2
3
4
5
6
7
8
<?php $wpads = get_wpads('header'); ?>
<?php if(isset($wpads)): ?>
<div id="ad">
    <div id="ad_inner">
        <?php echo $wpads; ?>
    </div>
</div>
<?php endif ?>

get_wpads(‘header’)の結果を変数$wpadsに代入。
変数$wpadsが空じゃなかったら、周りのdiv要素とechoで変数$wpadsの中身を出力。

ウィジェットでPHPを実行する -Executable PHP widget-

WordPressのウィジェットは、手軽にサイドバーにテキストやHTMLを追加できるけど、PHPが実行できない!

PHPが実行できたらもっと便利!
わざわざ、テーマにPHP追加しなくてよくなるしね。

ってことで、ウィジェットでPHPが実行できるプラグインを追加。

WordPress › PHP Code Widget « WordPress Plugins

インストールして有効化するとウィジェットに「PHP Code」が追加される。
これに思う存分PHPを書きなぐれば、実行結果がサイドバーに表示されてウマー。

今回、ウィジェットでPHP実行して何がしたかったかというと、WPAdsをウィジェットで表示させること。
サイドバーに広告をビローンと何個も表示させるのは見苦しいのでな。

uptime!! v0.3

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

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

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

uptime!! v0.2

uptimeは/proc/uptimeを参照してるだけなようなので、こっちを見て計算した方がuptimeコマンドのフォーマットに左右されないし、秒まで表示できるのでこっちを使いましょ。

$ cat /proc/uptime
8946563.01 17548528.13

/proc/uptimeを表示してみると、こんな感じ。
稼働時間 アイドル時間となってる。
まぁ、最初見たときはアイドル時間が稼働時間より長くて「なんぞ?」と思ったけど、コア二つ分のアイドル時間を合わせたものだと思うとしっくりくる。

うん、実はデュアルコアなんだ。

てなわけで、60で割ったり24で割ったりと頭がぐちゃぐちゃになりながらもできました。
時間の計算ってメンドイヨネ。

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
<?php
/*
Plugin Name: uptime!!
Plugin URI: http://www.dazzlingworld2.com/post_4177.html
Description: サーバーのアップタイムを表示する。
Version: 0.2
Author: だかね
Author URI: http://www.dazzlingworld2.com/
*/
 
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;
}
?>

<?php the_uptime(); ?>を呼べば稼働時間が、
<?php the_idletime(); ?>を呼べばアイドル時間が表示される。

実行結果

103日 13時間 27分 19秒 73
203日 3時間 11分 2秒 96

CPU:「かなり暇…」

uptime!!

サーバーの連続稼働時間を表示してみたくなったので、ちょろっと作ってみた。

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
<?php
/*
Plugin Name: uptime!!
Plugin URI: http://www.dazzlingworld2.com/post_4166.html
Description: サーバーのアップタイムを表示する。
Version: 0.1
Author: だかね
Author URI: http://www.dazzlingworld2.com/
*/
 
function the_uptime() {
    echo get_uptime();
}
function get_uptime() {
    $uptime = `uptime`;
    $day    = 0;
    $hur    = 0;
    $min    = 0;
 
    // 稼働日数の取得("x day" or "xx days"を検索)
    if(preg_match("/(\d+)\s+days?/", $uptime, $matches)) {
        $day = $matches[1];
    }
 
    // 稼働時間の取得
    if(preg_match("/(up|,)(\s+)(\d{1,2}):(\d{1,2})/", $uptime, $matches)) {
        // "up h:mm" or ", h:mm"
        $hur = $matches[3];
        $min = $matches[4];
    } else if(preg_match("/(up|,)(\s+)(\d{1,2})(\s+)min/", $uptime, $matches)) {
        // "up m min" or ", m min"
        $hur = 0;
        $min = $matches[3];
    }
 
    return $day . "日 " . $hur . "時間 " . $min . "分";
}
?>

uptimeの表示形式が稼働時間によって統一されてないので、表示がおかしくなるかも…

おると

WordPressで画像をアップロードした場合、title属性は付けれるけど、alt属性が付かない。

ちょっと気になったので、自動で付けてくれるプラグインをインストールした。

WordPress › SEO Friendly Images « WordPress Plugins

ただ、記事タイトルとファイル名とカテゴリ名しか指定できないのが気になるが…

上へ参ります。