uptime!!

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

<?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

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

気がついたこと

実家に帰るとやることがない。みんな仕事って何じゃそら。
いろいろやりたいけど、ハードディスク置いてきたんで、何かするにはうちからダウンロードしないといけないわけで。
回線遅いわけで。
PC遅いわけで。

とりあえず、WordPressで遊ぶかな。
ログが大量に残るけど。

■ 画像
画像をアップロードするとき、タイトルは勝手にファイル名が入る。(消しても必須属性だから勝手にランダム値が入る)
でも、代替テキストは空。
そのままアップロードするとalt属性が空になってしまう。

代替テキストが空だったらタイトルから引っ張ってきてほしいんだけどなぁ…
代替テキストにファイル名ってのはどうかと思うけどさ……

■ 続きを読む
トップに表示される部分とされない部分の境目に線を引いてるけどdiv使って引いてたんで
「<div>と</div>の間が空です。」
ですってwwwwwwwwww

修正するか…

あれ。どこ変えれば良いんだっけ?

■ <a>のアンカーXXXXはXXX行目で異なるリンク先を刺しています。
デフォルトウィジェットだと編集しても、WordPressバージョンアップで元に戻るわー
うぜー

_wp_unfiltered_html_commentみたいに置換ってのは難しいしなぁ…
かといって、自分で作るのはメンドイし…どうしたものか……

とりあえず、手で修正入れておくか。日付と時間をtitleにしておけば大丈夫だろ。
前やったときは投稿者にしてたからな。投稿者はまずいだろ。

default-widgets.php 645行目
get_comment_date(‘Y.m.j’)とget_comment_time(‘H:i:s’)追加

		< ?php echo $before_widget; ?>
			< ?php if ( $title ) echo $before_title . $title . $after_title; ?>
			<ul id="recentcomments">< ?php
			if ( $comments ) : foreach ( (array) $comments as $comment) :
			echo  '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '" title="'.get_comment_date('Y.m.j').' '.get_comment_time('H:i:s').'">' . get_the_title($comment->comment_post_ID) . '</a>') . '';
			endforeach; endif;?></ul>
		< ?php echo $after_widget; ?>

せっかく作ったので

デスクトップにtest.phpってファイル名で置いてたら、消して後悔しそうだったのでここに書いておこうと思う。

id属性”_wp_unfiltered_html_comment”の先頭のアンダーバーを除去するプラグイン。(ただし、手動)

<?php
$initdir    = "/wordpress/";
$ext        = ".php";
$find       = "_wp_unfiltered_html_comment";
$replace    = "wp_unfiltered_html_comment";

$filelist = get_filelist($initdir, $ext);
foreach($filelist as $key => $filename) {
    // ファイルを読み込む
    $fcontents = @file_get_contents($filename);

    // 検索
    $pos = strpos($fcontents, "_wp_unfiltered_html_comment");
    if($pos !== FALSE) {
        // 文字列が存在した場合
        // 置換
        $fout = fopen($filename, "w");
        fwrite($fout, str_replace($find, $replace, $fcontents));
        fclose($fout);
        echo "replace : " . $filename . "\n";
    }
}

// $initdir以下の$extファイルのリストを取得する
function get_filelist($startDir, $ext) {
    $dir      = $startDir;
    $dirs     = array();
    $filename = array();
    $next     = 0;
    foreach(glob($dir."*".$ext) as $_filename) {
        $filename[] = $_filename;
    }
    while(true) {
        $_dirs = glob($dir."*", GLOB_ONLYDIR | GLOB_MARK);
        if(count($_dirs)) {
            foreach ($_dirs as $key => $_dir) {
                foreach(glob($_dir."*".$ext) as $_filename) {
                    $filename[] = $_filename;
                }
                $dirs[] = $_dir;
            }
        } else {
            break;
        }
        $dir = $dirs[$next++];
    }
    return $filename;
}
?>

どっちが面倒なのか

wordpressにログインしてる状態で、個別ページを開くと文法エラーになる。
コメント送信部分のid属性値に”_”で始まってる “_wp_unfiltered_html_comment” があるのが原因で、頭のアンダーバーを取ればエラーは出なくなる。

ただ、バージョンアップする度に3つのファイルを開いて “_wp_unfiltered_html_comment” を置換するのが面倒だった。

なので。

phpでwordpressディレクトリ以下をgrepかけて置換するのを作った。

しかし、だ。
しかしなんだ。
いちいち、sshとかでサーバーにログインしてphp実行させるのめんどくさい。

じゃあ、プラグインにするか。
と、なり。

作ってみた。初めてのwordpressプラグイン!
しょぼい……

_wp_unfiltered_html_comment replacer

管理画面を開くたびにチェックして勝手に置換したほうが楽だろうけど…
毎回、ファイルチェックするのはちょっと…

余談:
バージョンアップしないっていう選択肢はない。
ScanNetSecurity – WordPressのfile.php脆弱性に関する検証レポートを発表(NTTデータ・セキュリティ)

<textarea> には初期値となるテキストを指定しておきましょう。

Another HTML-lint gatewayでチェックすると個別ページで

「<textarea> には初期値となるテキストを指定しておきましょう。」

っていわれる。
入力用フォームなら初期値とか要らない気がするんだが、何かしら文字を出しておくのも悪くないかなと思って初期値を入れてみることにした。

    <p>
        <textarea name="comment" id="comment" cols="45" rows="10" tabindex="4">コメントして下さい。</textarea>
    </p>

テーマのcomments.phpに上記のように初期値を追加。
これで、100点だ。

しかし、このままだとボタンを押されると「コメントして下さい。」の文字が送信されてしまう。
そこの制御はJavascriptさんに任せることにします。

上の検索フォームで使ってるソースを流用。01

$(document).ready(function(){
  var defmsg = 'コメントして下さい。';
  $('#comment').blur(function(){
      var $$=$(this);
      if($$.val()=='' || defmsg==$$.attr('value')){
        $$.css('color', '#7F7F7F').val(defmsg);
      }
    })
    .focus(function(){
      var $$=$(this);
      if(defmsg==$$.attr('value')){
        $(this).css('color', '#000000').val('');
      }
    })
    .parents('form:first').submit(function(){
      var $$=$('#comment');
      if(defmsg==$$.attr('value')){
        $$.triggerHandler('focus');
      }
    }).end()
    .blur();
});

これで、フォームがアクティブになると「コメントして下さい。」の文字が消え。
かつ、初期値のままでは投稿できないようになりましたとさ。

  1. jQueryを使用 [戻る]

_wp_unfiltered_html_comment

WordPressにログインした状態のコメントフォーム内のid属性値に”_wp_unfiltered_html_comment”ってのがある。

id値はアンダーバーから始まっちゃダメだろ…

まぁ、別に何か問題があるというわけではないんだが、FirefoxにHtml Validatorをインストールしてると警告マークが付いて気になってしょうがない。

というわけで、最初のアンダーバーを取って”wp_unfiltered_html_comment”にする。

dw2009071802 550x265

プラグインが使ってるかもしれないから、一応Grepした方がいいよ。

Another HTML-lintで100点を目指せ

現状

dw2009071701 550x364

すでに、「よくできました。」である。
もうゴールしても良さそうな点数だけど、気になるので修正。

プラグインと動作チェック

HTTPのエラーログに大量のエラーが…

[Mon Jul 13 20:19:42 2009] [error] [client 203.135.231.85] next, referer: http://www.dazzlingworld2.com/

<!–nextpage–>を使ったページを表示するだけで出るようで、何でこんなのが出るのか半日ほど調べたけど分からず。
おかげで仕事も手に付かず。
でも、仕事中にもしかしてと思い当たる。

もしかして、PHPにエラーログ吐かせる命令があるのではないか。と。

で、実際にあってビンゴです。
error_log();
ってのらしい。

サーバー内を”error_log(‘next’)”でgrepしてみると一件出てきた。
Table of Contents Generatorっていう見出しから目次を作るプラグインの中にありました。

Table of Contents Generator的にはnextpageは使って欲しくないのだろうか?
確かに、目次のリンクが切れそうではあるが…

error_log(‘next’);をコメントにすれば良いんだろうけど、プラグイン自体使わなさそうだから停止しとくかな。

wp-cumulusの日本語化

wp-cumulusを日本語化したのは探すと結構出てくるけど、Flashにフォントを埋め込むため、やっぱりファイルサイズが大きい。
日本語すべてとなると1.8MBを越える。

いくらブロードバンド時代だと言っても限度があるわけで、どのページ開いても1.8MB以上も読み込むのはサーバー的にも良くないと思ったので、埋め込む文字を第一水準までにしてみた。
変な漢字使わなければ第一水準で十分と思う。

以下、今回埋め込んだ文字。
・大文字
・小文字
・数字
・句読点記号
・基本ラテン
・日本語(かな)
・日本語 漢字 – JIS 第一水準
・ラテン I

1MB近くも削れて830KBにまで減った。

使ったフォントはライセンス的にも大丈夫そうな、VLゴシックフォントを使用。
出来れば太字にしたかったんだけど太字がなかった…
太字じゃなくても、これはこれで良いかなと。

tagcloud.zip