にある全てのファイル(テキストファイル)の中身を、
ブラウザからアクセスした時、テキストで表示するphpのコードを教えて下さい。
※ 但し、 表示順はファイルの更新時間順で表示してください。
この場合、自分自身(php)も表示されるとか、そういう事は気にしなくて結構です。
「./ 同一ディレクトリ」がよく分からないのですが、php スクリプトが置いてあるディレクトリと同じ階層にあるファイルの中身を出力するのだ、と解釈しました。
<pre> <?php // 対象ディレクトリ $s = $_SERVER['SCRIPT_FILENAME']; $dir = dirname($s); // 同じ階層にあるファイルの、フルパスと更新日時を獲得 $dir_h = opendir($dir); $list = array(); $i = 0; while (false !== ($e = readdir($dir_h))) { $f = $dir . "/" . $e; if (is_file($f)) { $list[$i][0] = $f; $list[$i][1] = filemtime($f); ++$i; } } closedir( $dir_h ); // 更新日の新しい順に並べ替え function sort_func($a, $b) { return $b[1] - $a[1]; } usort($list, "sort_func"); // ファイルの内容を出力 foreach ($list as $e) { $path = $e[0]; $mtime = $e[1]; echo "----------------\n"; echo $path . "\n"; echo date("Y/m/d H:i:s", $mtime) . "\n"; echo "--\n"; echo htmlspecialchars(file_get_contents($path)); } ?> </pre>
上記のスクリプトが置いてあるディレクトリにあるファイルを、そのスクリプトも含めて、以下の繰り返しで出力します。
「ブラウザからアクセスしたときに」と質問の文面にあるので、以下をやってます。
HTML のエスケープが要らないということであれば、最後の方の htmlspecialchars()
を外してください。
手抜きで、html や body などのタグを省いちゃってますが、これでも普通のブラウザには表示できます。
php スクリプトが置いてあるディレクトリは、スクリプトが CGI として動作できる設定になっている、という大前提があります。
対象としているディレクトリの位置が違う、ということであれば、先頭の方の $dir 変数の内容を気に入るところに変えてください。
ブラウザ経由での表示ということなので、スクリプトが表示できる位置になってるという前提があります。
dir(パス)で、辞書順にファイルのリストが取れるので、filemtime(パス)で取得した更新時間順にfile_get_contentsしてprintで、どうですか。
$files = dir("パス");
$filecnt = 0;
$kousnhdk = array();
$junidx = array();
$filepaths = array();
while (($filename = $files->read()) != FALSE) {
$kousnhdk[] = filemtime("パス" . $filename);
$junidx[] = $filecnt;
$filepaths[] = "パス" . $filename;
$filecnt = $filecnt + 1;
}
$i = 0;
while ($i < $filecnt) {
$j = $filecnt - 1;
while ($j > $i) {
if ($kousnhdk[$i] < $kousnhdk[$j]) {
$wk = $junidx[$j];
$junidx[$j] = $junidx[$i];
$junidx[$i] = $wk;
$wk = $kousnhdk[$j];
$kousnhdk[$j] = $kousnhdk[$i];
$kousnhdk[$i] = $wk;
}
$j = $j - 1;
}
$i = $i + 1;
}
$i = 0;
while ($i < $filecnt) {
print file_get_contents($filepaths[$junidx[$i]]);
$i = $i + 1;
}
「./ 同一ディレクトリ」がよく分からないのですが、php スクリプトが置いてあるディレクトリと同じ階層にあるファイルの中身を出力するのだ、と解釈しました。
<pre> <?php // 対象ディレクトリ $s = $_SERVER['SCRIPT_FILENAME']; $dir = dirname($s); // 同じ階層にあるファイルの、フルパスと更新日時を獲得 $dir_h = opendir($dir); $list = array(); $i = 0; while (false !== ($e = readdir($dir_h))) { $f = $dir . "/" . $e; if (is_file($f)) { $list[$i][0] = $f; $list[$i][1] = filemtime($f); ++$i; } } closedir( $dir_h ); // 更新日の新しい順に並べ替え function sort_func($a, $b) { return $b[1] - $a[1]; } usort($list, "sort_func"); // ファイルの内容を出力 foreach ($list as $e) { $path = $e[0]; $mtime = $e[1]; echo "----------------\n"; echo $path . "\n"; echo date("Y/m/d H:i:s", $mtime) . "\n"; echo "--\n"; echo htmlspecialchars(file_get_contents($path)); } ?> </pre>
上記のスクリプトが置いてあるディレクトリにあるファイルを、そのスクリプトも含めて、以下の繰り返しで出力します。
「ブラウザからアクセスしたときに」と質問の文面にあるので、以下をやってます。
HTML のエスケープが要らないということであれば、最後の方の htmlspecialchars()
を外してください。
手抜きで、html や body などのタグを省いちゃってますが、これでも普通のブラウザには表示できます。
php スクリプトが置いてあるディレクトリは、スクリプトが CGI として動作できる設定になっている、という大前提があります。
対象としているディレクトリの位置が違う、ということであれば、先頭の方の $dir 変数の内容を気に入るところに変えてください。
ブラウザ経由での表示ということなので、スクリプトが表示できる位置になってるという前提があります。
そのコードをお願いします。