WEB上からapacheの生ログを見ることができるようにするプログラム
apache生ログをWEB上から見たいという要望を受けて簡単にPHPで作ってみましたのでご紹介致します。突っ込みどころ満載かと思いますが、その場合はコメントに記載いただけましたら幸いです。改善的コメント大歓迎です。
※重大な警告:この手のスクリプトは重大なセキュリティホールを招く場合がありますので、もし実利用される場合は十分ご注意ください。
【プログラムの概要】
今回作成したプログラムでは、特定ディレクトリ内のファイルリストを取得して一覧を出します。そして一覧の中から特定ファイルをクリックするとそのファイルの最後10行(もしくは指定行数)を表示するというものです。例えばこんな感じです。
web1 top>
access_log 38543
access_log 5435
access_log 23533
error_log 10206
error_log 236
error_log 1256
【プログラム】
これを実現するプログラムは以下の通りです。特に難しいことはやってないので容易に理解できるかと思います。(赤字の部分を直して使ってください)
■logview.php
<?php
$scripturl = "http://www.example.com/admin/logview.php";
$basedir = "/var/log/httpd";global $f_cmd;
global $f_filename;
$f_numlist = 10;
if (isset($_GET["c"])) $f_cmd = htmlspecialchars(@$_GET["c"], ENT_QUOTES);
if (isset($_GET["f"])) $f_filename = htmlspecialchars(@$_GET["f"], ENT_QUOTES);
if (isset($_GET["n"])) $f_numlist = htmlspecialchars(@$_GET["n"], ENT_QUOTES);if (strpos($f_filename, "..") !== FALSE) {
print "You can't use '..'.";
exit;
}print `/bin/hostname` . "<a href='$scripturl'>top></a><br />";
?><form method="GET" action="viewlog.php">
<input type="hidden" name="c" value="<?=$f_cmd?>" />
<input type="hidden" name="f" value="<?=$f_filename?>" />
tail -<input type="text" name="n" size=3 value="<?=$f_numlist?>" />
<input type="submit" />
</form><pre>
<?php
//--------------------
//ログ一覧表示
//--------------------
if ($f_cmd == "") {
$lists = `ls -lb $basedir/*log* |awk '{print $9,$5}'`;
$arr_lists = split("\n", $lists);
foreach ($arr_lists as $list) {
$list = str_replace($basedir."/", "", $list);
$arr_list = split(" ", $list);
if ($arr_list[1] != 0) {
$arr_list_new = str_replace("error", "<font color=red>error</font>", $arr_list[0]);
print "<a href='$scripturl?c=p&f=$arr_list[0]'>$arr_list_new</a> $arr_list[1]<br />";
}
}
}//--------------------
//ログ表示
//--------------------
if ($f_cmd == "p" && !empty($f_filename)) {
system("tail -$f_numlist $basedir/$f_filename");
}
?>
</pre>
</html>



Recent Comments