●QRコードからアクセスする携帯サイト(会場外サーバ)のプログラム

・トップページ(HTML部は省略)

[codesyntax lang=”php” title=”index.php”]

<?php

include "log_writer.php";
include "analyze.php";
include "outdata.php";

print $last_record;

?>

[/codesyntax]


・アクセスログ記録

[codesyntax lang=”php” title=”log_writer.php”]

<?php

//現在の日付を取得
$time1 = gmdate("Y/m/d",time()+60*60*9);
//現在の時刻を取得
$time2 = gmdate("H:i",time()+60*60*9);
//日付の取得
$time3 = date("D",time()+60*60*9);

//カウンタ値取得、書き込み
$counter_file = 'counter.txt';
$counter_lenght = 8;

$fp = fopen($counter_file, 'r+');

if ($fp){
    if (flock($fp, LOCK_EX)){

        $counter = fgets($fp, $counter_lenght);
        $counter++;

        rewind($fp);

        if (fwrite($fp,  $counter) === FALSE){
            print('ファイル書き込みに失敗しました');
        }

        flock($fp, LOCK_UN);
    }
}

fclose($fp);

//アクセス解析ログ記録
$log_file = 'log.cgi';

$log = $counter."\t".$time1."\t".$time2."\t".htmlspecialchars(getenv('REMOTE_ADDR'))."\t".htmlspecialchars(getenv('REMOTE_HOST'))."\t".htmlspecialchars(getenv('HTTP_USER_AGENT'))."\n";

$last_record = "<b>Count:</b>".$counter."<br><b>Date:</b>".$time1."&nbsp;".$time2."<br><b>RemoteAddr:</b>".htmlspecialchars(getenv('REMOTE_ADDR'))."<br><b>RemoteHost:</b>".htmlspecialchars(getenv('REMOTE_HOST'))."<br><b>UserAgent:</b>".htmlspecialchars(getenv('HTTP_USER_AGENT'))."<br>";

$fp = fopen($log_file,"a+");

if (!$fp) {
  print("ファイルポインタのオープンに失敗しました。\n");
  exit;
}
//ファイルの排他ロック
if (!flock($fp,2)) {
  print("ファイルロックに失敗しました。\n");
  exit;
}
//ファイルに書き込み
fseek($fp,SEEK_SET);
if (!fputs($fp,$log)) {
  print("書き込みに失敗しました。\n");
  exit;
}
//ファイルのロック解放
if (!flock($fp,3)) {
  print("ファイルロックの解放に失敗しました。\n");
  exit;
}
fclose($fp);

?>

[/codesyntax]


・携帯キャリア解析

[codesyntax lang=”php” title=”analyze.php”]

<?php

$log_file = 'log.cgi';
$fp = fopen($log_file,"r");
	$row = 5;

	$num = 0;
	while (!feof($fp)) {
		$line = fgets($fp);
		$num++;
	}
fclose($fp);

if($num - $row >= $row){ $row = $num - $row; }

//////// ACCESS LOG ////////
$num = 0;
$log ="";
$other=0;$softbank=0;$docomo=0;$au =0;$ddi=0;$willcom=0;$ipod=0;$iphone=0;$mac=0;$windows=0;

$fp = fopen($log_file,"r");
while (!feof($fp)) {
	$line = fgets($fp);
	if($line==""){
		break;
	}

	if(preg_match("/Macintosh/is", $line)){
		$mac++;
	}elseif(preg_match("/Windows/is", $line)){
		$windows++;
	}elseif(preg_match("/iPod/is", $line)){
		$ipod++;
	}elseif(preg_match("/iPhone/is", $line)){
		$iphone++;
	}elseif(preg_match("/DoCoMo/is", $line)){
		$docomo++;
	}elseif(preg_match("/J-PHONE/is", $line)){
		$softbank++;
	}elseif(preg_match("/Vodafone/is", $line)){
		$softbank++;
	}elseif(preg_match("/SoftBank/is", $line)){
		$softbank++;
	}elseif(preg_match("/KDDI/is", $line)){
		$au++;
	}elseif(preg_match("/UP.Browser/is", $line)){
		$au++;
	}elseif(preg_match("/DDIPOCKET/is", $line)){
		$ddi++;
	}elseif(preg_match("/WILLCOM/is", $line)){
		$willcom++;
	}elseif(preg_match("/PDA/is", $line)){
		$pda++;
	}elseif(preg_match("/Mozilla/is", $line)){
		$other++;
	}else{
		$other++;
	}		

	list($o_count,$o_day,$o_time,$o_ip,$o_host,$o_ua) = explode("\t",$line);
	if($num >= $row-1){
		$log = $log.$o_day." ".$o_time."\r".$o_ip."\r".$o_host."\r".$o_ua.""."*************************************\r";
	}
	$num++;
}
fclose($fp);

//////// Carrier / OS ////////
	if($docomo>0){$carrier = "DoCoMo : ".$docomo."\r";}
	if($softbank>0){$carrier = $carrier."SoftBank : ".$softbank."\r";}
	if($au>0){$carrier = $carrier."AU : ".$au."\r";}
	if($willcom>0){$carrier = $carrier."Willcom : ".$willcom."\r";}
	if($ddi>0){$carrier = $carrier."DDI Pocket : ".$ddi."\r";}
	if($ipod>0){$carrier = $carrier."iPod : ".$ipod."\r";}
	if($iphone>0){$carrier = $carrier."iPhone : ".$iphone."\r";}
	if($pda>0){$carrier = $carrier."PDA : ".$pda."\r";}
	if($windows>0){$carrier = $carrier."Windows : ".$windows."\r";}
	if($mac>0){$carrier = $carrier."MacOS : ".$mac."\r";}
	if($other>0	){$carrier = $carrier."Other : ".$other."\r";}	

?>

[/codesyntax]


・アクセスログ

[codesyntax lang=”text” title=”log.cgi”]

494	2010/02/22	17:01	124.146.175.15	proxyag015.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
495	2010/02/22	17:38	126.250.158.168	pw126250158168.10.tss.panda-world.ne.jp	Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0_1 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A400 Safari/528.16
496	2010/02/22	17:39	126.250.158.168	pw126250158168.10.tss.panda-world.ne.jp	Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0_1 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A400 Safari/528.16
497	2010/02/22	17:41	210.153.84.118	proxy1164.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
498	2010/02/23	07:50	66.249.71.218	crawl-66-249-71-218.googlebot.com	Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
499	2010/02/23	10:51	114.148.27.178	p4178-ipbf2404souka.saitama.ocn.ne.jp	Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; ja-jp) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9
500	2010/02/23	11:27	219.108.157.78	wb47proxy06.ezweb.ne.jp	KDDI-KC38 UP.Browser/6.2.0.11.1.2.2e (GUI) MMP/2.0
501	2010/02/23	11:39	222.5.63.230	wb22proxy09.ezweb.ne.jp	KDDI-SA36 UP.Browser/6.2.0.10.2.1 (GUI) MMP/2.0
502	2010/02/23	13:13	210.153.84.100	proxy1108.docomo.ne.jp	DoCoMo/2.0 F02B(c500;TB;W24H16)
503	2010/02/23	17:41	123.108.237.25	w11.jp-t.ne.jp	SoftBank/1.0/930SH/SHJ001/SN353689020294206 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
504	2010/02/23	17:41	123.108.237.26	w12.jp-t.ne.jp	SoftBank/1.0/930SH/SHJ001/SN353689020294206 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
505	2010/02/23	17:41	210.153.84.21	proxy1161.docomo.ne.jp	DoCoMo/2.0 SH705i(c100;TB;W24H16)
506	2010/02/23	17:42	210.153.84.108	proxy1144.docomo.ne.jp	DoCoMo/2.0 SH705i(c100;TB;W24H16)
507	2010/02/23	19:11	59.135.38.143	wb32proxy03.ezweb.ne.jp	KDDI-ST34 UP.Browser/6.2.0.13.2 (GUI) MMP/2.0
508	2010/02/24	10:19	210.153.86.120	proxya148.docomo.ne.jp	DoCoMo/2.0 SH705i2(c100;TB;W30H20)
509	2010/02/24	10:29	114.148.27.178	p4178-ipbf2404souka.saitama.ocn.ne.jp	Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; ja-jp) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9
510	2010/02/24	11:07	210.136.161.164	proxy180.docomo.ne.jp	DoCoMo/2.0 P906i(c100;TB;W30H19)
511	2010/02/24	13:40	210.153.84.2	proxy1102.docomo.ne.jp	DoCoMo/2.0 P906i(c100;TB;W30H19)
512	2010/02/24	14:15	124.146.175.54	proxyag046.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
513	2010/02/24	14:22	210.136.161.111	proxy1135.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
514	2010/02/24	15:26	124.146.175.17	proxyag017.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
515	2010/02/24	15:44	210.153.84.110	proxy1148.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
516	2010/02/24	15:46	210.153.84.11	proxy1141.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
517	2010/02/24	15:53	210.136.161.168	proxy188.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
518	2010/02/24	15:55	123.108.237.27	w21.jp-t.ne.jp	SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
519	2010/02/24	16:09	210.136.161.163	proxy179.docomo.ne.jp	DoCoMo/2.0 N904i(c100;TB;W30H20)
520	2010/02/24	16:22	123.108.237.3	w52.jp-t.ne.jp	SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
521	2010/02/24	16:24	123.108.237.30	w32.jp-t.ne.jp	SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1

[/codesyntax]


・アクセスログをXMLへ整形出力

[codesyntax lang=”php” title=”outdata.php”]

<?php

$outdata = <<<XML

<?xml version="1.0" encoding="UTF-8"?>
<data>
	<item>
		<title>log</title>
		<value>$log</value>
	</item>
	<item>
		<title>count</title>
		<value>$o_count</value>
	</item>
	<item>
		<title>carrier</title>
		<value>$carrier</value>
	</item>
</data>

XML;

$fp = fopen('outdata.xml', 'w');
if ($fp){
    if (flock($fp, LOCK_EX)){
		fputs($fp, $outdata);
	    flock($fp, LOCK_UN);
    }
}
fclose($fp);

?>

[/codesyntax]


・出力されたXMLファイル

[codesyntax lang=”xml” title=”outdata.xml”]

<?xml version="1.0" encoding="UTF-8"?>
<data>
	<item>
		<title>log</title>
		<value>
2010/05/05 08:45
2010/02/24	15:53
210.136.161.168
proxy188.docomo.ne.jp
DoCoMo/2.0 N904i(c100;TB;W30H20)
*************************************
2010/02/24	15:55
123.108.237.27
w21.jp-t.ne.jp
SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
*************************************
2010/02/24	15:55
210.136.161.163
proxy179.docomo.ne.jp
DoCoMo/2.0 N904i(c100;TB;W30H20)
*************************************
2010/02/24	15:55
123.108.237.3
123.108.237.3	w52.jp-t.ne.jp
SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
*************************************
2010/02/24	15:55
123.108.237.30
w32.jp-t.ne.jp
SoftBank/1.0/921P/PJP21/SN353701020103293 Browser/NetFront/3.4 Profile/MIDP-2.0 Configuration/CLDC-1.1
*************************************

</value>
	</item>
	<item>
		<title>count</title>
		<value>530</value>
	</item>
	<item>
		<title>carrier</title>
		<value>DoCoMo : 112
SoftBank : 13
AU : 25
iPhone : 7
Windows : 81
MacOS : 176
Other : 8
</value>
	</item>
</data>

[/codesyntax]


・携帯からのアクセスの有無をチェック

アクセスログと同時に更新されるアクセスカウンタの値が増えていたら「1」を返す。会場内サーバと会場外サーバとの通信量を減らすため、数秒おきに会場内サーバの「check2.pl」が以下の「check.php」へアクセスし、「1」を返した場合のみ上記XML化したログファイルをダウンロードする。

[codesyntax lang=”php” title=”check.php”]

<?php

$fp0 = fopen('counter0.txt', 'r');
$counter0 = fgets($fp0);
fclose($fp0);

$fp = fopen('counter.txt', 'r');
$counter = fgets($fp);
fclose($fp);

if ($counter - $counter0 > 0 ){
	print "1";
	$fp1 = fopen('counter0.txt', 'w');
	fputs($fp1, $counter);
	fclose($fp1);
}else{
	print "0";
}

$fp2 = fopen('last_access.txt', 'w');
fputs($fp2, date("m/d H:i:s"));
fclose($fp2);

?>

[/codesyntax]


TOPページへ前のページへ戻る  1 2 3   次のページへ