PHPのパース時間&MySQLの最終更新日時取得
「嗚呼、ミッドウェイ海戦の日(1942/6/5。聯合艦隊の、すなわち海洋国家たる大日本帝国の終わりの始まりの日)だなぁ」等と言いつつ、久々にPHPなんか触ってます。
まず、動的生成のページによくある「パース時間の表示」を付けようと調べてみました。
microtime -- 現在のUNIXタイムスタンプをマイクロ秒まで返す
に殆どそのままのサンプルコードが載ってましたんで作業自体はコピペで終わるんですが…この短いサンプルコードが何をしてるのかがイマイチ解りません(^_^;)
list($usec, $sec) = explode(" ",microtime());
return ((float)$sec + (float)$usec);
}
今まで使ったことなかったんですが、microtime()という関数は
ということなんだそうです。
実際に
とだけ書いたPHPファイルにブラウザでアクセスしてみると
という出力が得られました。ふむふむ、空白の前がマイクロ秒(小数点以下の部分)、空白の後ろが秒なので、これを空白で分割して各々変数に収納し、それを足してやる事で
起動された時点での1970年1月1日からの通算秒
を得る仕掛けなんですな。なるほどなるほど、ようやく理解。
ということで、このgetmicrotime()をそのまま頂いてきてスクリプトの先頭でgetmicrotime()の値を一旦変数に代入、スクリプトの末尾で現getmicrotime()と引き算をする事で「パース時間」を取得出来るようになりました(^_^)
パース時間の表示が最下部に多いのは、この同じような仕掛けを使ってるヒトが多いからなんでしょか? それとも、単純にレイアウトの都合なのか…??
データベースの最終更新時刻は当初
$renewed = filemtime($path);
↑こんなコードを書いて取得しようとしてた(^^;んすが、
(errno=13 - Permission denied)
と叱られてどうにもならず。実際にデータベースの最終更新時刻を表示しているphpMyAdminのコードを追ったところ、
echo $info["Update_time"];
↑こんな感じなことを発見。
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+
| Name | Type | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment |
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+
| list | MyISAM | Dynamic | 6934 | 128 | 891176 | 4294967295 | 744448 | 0 | NULL | 2004-06-05 07:50:31 | 2004-06-05 07:50:41 | NULL | | |
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+
1 row in set (0.00 sec)
要するに、PHP側で要らんことをしなくても、MySQLにSHOW TABLE STATUSというSQLを送ればMySQLがステータスを返してくる→ただこれを受け取ればいいだけなんすね(^^;;
echo $info["Update_time"] . "<br>\n";
実際に使ったコードは↑こんな感じ。コレで$tableに入れてるテーブルの最終更新日時を取得できます。
↑こちらも今回覚えた新しいSQL。
ext(拡張子)毎に、ファイルサイズの合計をtotal、ファイル数をnumとして各々集計しなさい。ただし、集計の対象とするのはファイルサイズの合計が1000000000バイト以上のもののみ。並び順はファイルサイズ合計の逆順(大きい順)
という内容がコレ1文で済んじゃいまして、改めてSQLの威力を痛感してたりします。データベースを使わずに自分でこのロジックを組もうと思うと、結構タイヘン。