php - ファイルの更新日を表示する

 
1. 能書き
2. ファイルの更新日を表示する NG
3. JavaScript でやってみた
4. ファイルの更新日を表示する 再挑戦

1. 能書き

 長らく馬鹿なことをしていたもので。  ここのサイトで、目次のページにはたいてい最終更新日を記述していますが。

<?php
$filename = $_GET["file"];
if (file_exists($filename))
{
	print "<span style=\"float: right;\">";
	print "最終更新日:" . date("Y年n月j日", filemtime($filename));
	print "</span>";
}
?>
 てな .php のファイルを書いて、.html 側で、自身のファイル名を記述して、呼出しを行っておりました。  これがコピペしているもので、ファイル名を書き間違って、別のファイルの更新日を書いてしまっていましたのだ。

2. ファイルの更新日を表示する NG

 実は $_SERVER でファイル名を取得することができるのでした。  $_SERVER['PHP_SELF']; ってのもありますが、これはドキュメントルートからのパスなので、filemtime() に食わせることはできません。  使うのは $_SERVER['SCRIPT_FILENAME']、現在実行しているスクリプトの絶対パスです。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<pre>

<?php print '<span style="float: right;">最終更新日:' . date("Y年n月j日", filemtime($_SERVER['SCRIPT_FILENAME'])) . '</span>'; ?>

</pre>
</body>
 ってなコードを書いてやると、自身の更新日を表示することができます。  だがしかし、これって、apache の場合、前項に書きましたが、.html に php の実行を許可しなければならないのです。  わたしのサイトでは、ちょっとした仕掛けをしているため、.html からインクルードした .php は実行できるが、.html 自身には php の実行権限を与えていないのだ。

3. JavaScript でやってみた

 ここ php の記述をしているのですが、試行錯誤の過程ということで JavaScript で書いてみました。

<span style="float: right;"><script>
<!--
var day = new Date(document.lastModified);	var mon = day.getMonth() + 1;
document.write("最終更新日:" + day.getFullYear() + "年" + mon + "月" + day.getDate() + "日 ");
// -->
</script></span>
 一応、動作だけはしますよ。  これでできるとぬか喜びして、これをテンプレートファイルにして埋め込んで。  「python」のページに書いていますが、あるディレクトリ配下のファイルを事情により、最終更新日を書き換えて、見てみたら。  全部、ファイルを参照している日付になっているじゃありませんか。  まぁ JavaScript はクライアントサイドで動いていますのでね。  http のプロトコル内にある LastModified をひろっているらしい。それがどういう日時が調べる気力が今はありませんが、とりあえず、わたしの望むものではない。

4. ファイルの更新日を表示する 再挑戦

 で、また、php のマニュアルを読んで、書いたのがこれ。

<?php
$filename = '・・・' . $_SERVER['REQUEST_URI'];
			 ↑
			ここにドキュメントルートを記述します。

if (substr($filename, -1) == '/')
{
	$filename .= 'index.html';
}

if (file_exists($filename))
{
	print "<span style=\"float: right;\">";
	print "最終更新日:" . date("Y年n月j日", filemtime($filename));
	print "</span>";
}
?>
 制限は、あれこれありますが、これがわたしの望んでいた動きをしてくれます。  一応解説をしておきますと。  2行目、$_SERVER['REQUEST_URI'] で、ドメインを除く URI が取得できます。  その先頭にドキュメントルートをくっつけてサーバ上の絶対パスとファイル名を作成します。  6行目、/(スラッシュ)で終わっている場合は、ファイル名を index.html にします、  このあたり、違うインデックスファイルを使っている場合は、書き換えたり、複数ある場合は、優先順位により、ファイルの有無を確認してファイル名を決める必要があります。  あとは、そこまで難しくないでしょう。  絶対パスつきのファイル名からファイルの最終更新日を取得して表示しています。