uptime!! v0.3
WordPressプラグインで管理ページ以外のところにフックを使ったことがなかったので、試しにthe_contentにフックしてみた。
とりあえず、記事に書かれた任意のhtmlコメントを置換してみることに。
“<!– uptime!!#uptime –>”で連続稼働時間
“<!– uptime!!#idletime –>”でアイドル時間
ま、実用性はないよねぇ…
WordPressプラグインで管理ページ以外のところにフックを使ったことがなかったので、試しにthe_contentにフックしてみた。
とりあえず、記事に書かれた任意のhtmlコメントを置換してみることに。
“<!– uptime!!#uptime –>”で連続稼働時間
“<!– uptime!!#idletime –>”でアイドル時間
ま、実用性はないよねぇ…
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:「かなり暇…」
サーバーの連続稼働時間を表示してみたくなったので、ちょろっと作ってみた。
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
ただ、記事タイトルとファイル名とカテゴリ名しか指定できないのが気になるが…
デスクトップにtest.phpってファイル名で置いてたら、消して後悔しそうだったのでここに書いておこうと思う。
id属性”_wp_unfiltered_html_comment”の先頭のアンダーバーを除去するプラグイン。(ただし、手動)
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 | <?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; } ?> |
Another HTML-lint gatewayでチェックすると個別ページで
「<textarea> には初期値となるテキストを指定しておきましょう。」
っていわれる。
入力用フォームなら初期値とか要らない気がするんだが、何かしら文字を出しておくのも悪くないかなと思って初期値を入れてみることにした。
1 2 3 | <p>
<textarea name="comment" id="comment" cols="45" rows="10" tabindex="4">コメントして下さい。</textarea>
</p> |
テーマのcomments.phpに上記のように初期値を追加。
これで、100点だ。
しかし、このままだとボタンを押されると「コメントして下さい。」の文字が送信されてしまう。
そこの制御はJavascriptさんに任せることにします。
上の検索フォームで使ってるソースを流用。*1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $(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(); }); |
これで、フォームがアクティブになると「コメントして下さい。」の文字が消え。
かつ、初期値のままでは投稿できないようになりましたとさ。
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’);をコメントにすれば良いんだろうけど、プラグイン自体使わなさそうだから停止しとくかな。
昨日辺りから、フィードが500エラーを返してて何でだろうと色々調べてみると、昨日入れたExec-PHPが問題だったらしい。
Exec-PHP単体で動かしてる分には良かったんだけど、”Syntax Highlighter for WordPress”と同時に使用すると、フィードでPHPを実行しようとしてるみたいで。*1
さらに、フィードではSyntax Highlighterも動かないから[php]も置換されずにそのまま出てるわけで…
“eval()’d code on line 20″とか’[‘が多いとかいうエラーが出てました。
フィードでPHPを動かす必要性はあまりない。
てことでExec-PHPで実行される前に[php]~[/php]をオミットすることにする。
exec-php/includes/runtime.php
1 2 3 4 5 6 7 8 9 10 11 | function eval_php($content) { // to be compatible with older PHP4 installations // don't use fancy ob_XXX shortcut functions $content = preg_replace('/\[php[^<>#x5d;*\](.*\r\n)+\[\/php\]/i', "", $content); ob_start(); eval("?>$content<?php "); $output = ob_get_contents(); ob_end_clean(); return $output; } |
空白に置換するんじゃなくて、何かしらの文字列にした方がいいかもねぇ。
「PHPソース省略」とか。
あと、PHPだけじゃなくてHTMLソースも消した方がよさそう。*2