WebのデータというのはGETだったりPOSTだったりソケットにストリームだったりするわけですけど
POSTやらGETがどう渡っているのか?ちゃんと引き渡せているのか?を確認しないといけないとき
とりあえず
vardump( $POST );
exit;
みたいに見ることがある。
これでもいいんだけど、いちいち処理がとまってしまうことやその都度exitを付けたり変えたりしないといけなくなって面倒。
できればPOSTした値がリアルタイムで見れればとってもラクなのにな~と思い簡易なPOST/GET監視スクリプトを作ってみた。
まず適当な名前のphpファイルを作成し、中身に以下を突っ込む
仮にauditcatcher.phpとする
log = "auditlog.dat";/*
* ログ保存場所
*/
$audit
/*
* 取得タイプ
* 0 = POST Only
* 1 = Get Only
* 2 = POST GET All
*/
$audittype = "2";
$oldoutput = "";
$postoutput = "";
$getoutput = "";
$date = new DateTime();
$datestr = $date->format('Y/m/d H:i:s');
/
* 過去ログ取得
*/
// ログファイル作成
if( !file_exists($audit_log) )
{
touch($audit_log);
}
$old_output = file_get_contents($audit_log);
/
* POST値取得
/
if( $audittype == 0 || $audittype == 2 )
{
foreach( $POST as $postkey => $postval )
{
$postoutput .= $datestr . " [" . $postkey . "] " . $post_val . "\n";
}
}
/
* GET値取得
/
if( $audittype == 1 || $audittype == 2 )
{
foreach( $GET as $getkey => $getval )
{
$getoutput .= $datestr . " (" . $getkey . ") " . $get_val . "\n";
}
}
/
* ログ記録
* 値 + 過去ログ
*/
file_put_contents($audit_log, $post_output.$get_output.$old_output);
POSTもしくはGETをリアルタイムに見たいところにこのaudit_catcher.phpをincludeするなりする。
そうするとPOSTやGETが来ると内容をログに出力します。
需要はないと思うけど一応POSTだけとかGETだけとか両方の出力も選択できるようにしてみました。
次にそのログを監視します。
これはJavaScript先生にx秒置きに取得してもらうというシンプルなものです。
仮にaudit_viewer.htmlとして中身に以下を突っ込みます。
<html lang="ja">
<head>
<title>Audit Catcher!!</title>
<meta charset="utf-8">
</head>
<body>
<script>
window.onload = get_log();
function getTextFile (fname)
{
var text = null;
var ajax = new XMLHttpRequest();
with (ajax)
{
onload =
function () { readyState == 4 && status == 200 && (text = responseText); };
open('GET', fname, false);
send(null);
};
return text;
}
function get_log()
{
log = (getTextFile('audit_log.dat'));
document.write(log.replace(/\n/g, "<br />"));
setTimeout(function()
{
location.reload();
}, 5000);
}
</script>
</body>
</html>
関連記事