木曜日, 9月 05, 2013

クエリストリングスをアクセス時間と一緒にテキストファイルに書き込むphp

クエリストリングスをアクセス時間と一緒にログに保存するphpです。


HTTPステータスコード200だけを受け取れればいいような場合、「it works」のようなページを開いてapacheログを見れば結果がわかるんですが、apacheログをリアルタイムに表示させてくれないさ●らインターネットのようなレンサバで同様なテストをしたいときにこれを使うと便利ですw


使い方

サーバーにstring_log.phpを644、string_log.logは666で設置する。
string_log.phpに?key=xxx&name=xxx&color=xxxのようなクエリストリングスをつけてアクセスする。
たとえば
http://your server/string_log.php?key=hogehoge&name=Manaka&color=red

というようにアクセスした場合、keyがあらかじめ指定してあるパスワードに合致していればログファイルであるstring_log.logに

2013-09-05 04:24:39 - name:Manaka - color:red

と保存される。


string_log.php


<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>string_log.php</title>
</head>
<body>
<?php

 $date = gmdate( 'Y-m-d H:i:s' );
 $key = $_GET["key"];
 $name = $_GET["name"];
 $color = $_GET["color"];
 $ipaddr = $_SERVER['REMOTE_ADDR'];

if($key == hogehoge) {
   $fp = fopen( 'string_log.log', 'a+');
   fwrite($fp, "\n\n$date - name:$name - color:$color");
   fclose($fp);
} elseif ($key == ip) {
   echo $ipaddr;
} else {
   echo '<p>it works.</p>';
}

?>
</body>
</html>


解説


<?php ←php開始
 $date = gmdate( 'Y-m-d H:i:s' ); ←変数dateにYYYY-MM-DD HH:MM:SSを代入する
 $key = $_GET["key"]; ←変数$keyにクエリの?key=""を代入する
 $name = $_GET["name"]; ←変数$nameにクエリの?name=""を代入する
 $color = $_GET["color"]; ←変数$colorにクエリの&color=""を代入する
 $ipaddr = $_SERVER['REMOTE_ADDR']; ←変数$ipaddrに接続元のIPアドレスを代入する
if($key == hogehoge) { ←もし$keyがhogehogeなら
   $fp = fopen( 'string_log.log', 'a+'); ←ファイルを追記専用で開く
   fwrite($fp, "\n\n$date - name:$name - color:$color"); ←変数などをファイルに書き込む
   fclose($fp); ←ファイルを閉じる
} elseif ($a == ip) { ←もし$keyがipなら
   echo $ipaddr; ←ブラウザに接続元のIPアドレスを表示する
} else { ←もし$keyがない、またはそれ以外なら
   echo '<p>it works.</p>'; ←ブラウザに指定した文字列を表示する
}
?> ←php終了

メモ・参考情報


  •  クエリストリングス(?以降の文字列)の取得はスーパーグローバル変数「$_GET」を使う
     例)ファイルへ書き込みでなく、htmlページに出力する場合には
<p>name : <?php echo $_GET["name"]; ?></p>
<p>color : <?php echo $_GET["color"]; ?></p>
  • ファイルへの追記(追記="a" 書き込み="w" 読み込み専用="r")
<?php
$fp = fopen("access.log", "a");
fwrite($fp, "ここに書かれたものを書き込みます");
fclose($fp);
?>
  • クエリストリングスがあるかないか確認する
※引用元 http://zxcvbnmnbvcxz.com/php-query_string/
<?php
if(!empty($_SERVER['QUERY_STRING'])){
echo 'あるよ';
}else{
echo 'ないよ';
}
?>
  • メモ phpinfo.php
<?php
phpinfo();
?>