PHPに関して

http://test.jp?id=001
とします。
これをhttp://test.jp?001
としてid=を省略する記述を見たことがあります。
この場合はソースはどう処理されていますか?

http://test.jp?id=001
http://test.jp?id=002
を作ります。その際にアクセスカウンターを作ります。
001に何人。
002に何人。
という風にカウントするにはどういうプログラムにすればいいですか?

おねがいします

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/27 17:23:31
  • 終了:2007/04/03 17:25:03

回答(4件)

id:inokuni No.1

いのくに回答回数1343ベストアンサー獲得回数212007/03/27 17:59:39

ポイント35pt

1. http://test.jp/?001 にアクセスした場合、$_SERVER["QUERY_STRING"] に 「"001"」 が入ります。

参考: http://jp2.php.net/reserved.variables


2.

<?php
$mycount["001"] = 1;  // id=001 の値を  1 とする。
$mycount["002"] = 20; // id=002 の値を 20 とする。

// 該当id の値に 1 を足す。
$mycount[$_SERVER["QUERY_STRING"]] = $mycount[$_SERVER["QUERY_STRING"]] + 1;

// $mycount の表示
echo "<html><body><pre>".var_export($mycount, TRUE)."</pre></body></html>";
?>

などでどうでしょうか?

id:rrr3

ありがとうございます!

でももう少し詳しくご説明を頂きたいので再度質問いたします。

002を20にしたのは何故ですか??20アクセスあることにしたんですか?

2007/03/27 18:31:46
id:inokuni No.2

いのくに回答回数1343ベストアンサー獲得回数212007/03/27 19:18:30

ポイント35pt

002を20にしたのは何故ですか??20アクセスあることにしたんですか?

例として 002 の現在値を 20 にしました。


おそらく、カウンターとして動作させるには、

各ユーザごとの現在値を読み込んで、

その現在値に 1 を足して、

その足した値を保存するという処理が必要になると思います。


現在値を保存するには テキストファイル に保存したり、

データベース に保存したりすることが考えられると思います。


↓テキストファイル「hozon.txt」に現在値を保存した場合

<?php
$hozonfile = "hozon.txt";	// 現在値を保存するファイル名

$fp = @fopen($hozonfile, "r+");	// ファイルを開く。
if( !$fp ) {			// ファイルがなかった場合、ファイルを作る。
	$fp = fopen($hozonfile, "w");
}

set_file_buffer($fp, 0);	// ファイルバッファを0にする。

flock($fp, LOCK_EX);	// ファイルにロックをかける。
rewind($fp);		// ファイルのポインタを先頭に持ってくる。

while (!feof($fp)) {		// 現在値の読み込み
	$buffer = fgets($fp, 1000000);
	list($id, $count) = explode(":", $buffer);
	$mycount[$id] = $count;
}

// 該当id に 1 を足す。
$mycount[$_SERVER["QUERY_STRING"]] = $mycount[$_SERVER["QUERY_STRING"]] + 1;

rewind($fp);
foreach($mycount AS $key => $value){	// 保存するデータの作成
	$data .= $key.":".$value."\n";
}
fwrite($fp, $data);	// 保存データを書き込み。

flock($fp, LOCK_UN);	// ファイルのロックを外す。
fclose($fp);		// ファイルを閉じる。
?>

参考: http://www.php.net/file

参考: http://www.php.net/fopen

id:rrr3

ありがとうございます!

2007/03/28 11:41:58
id:GEN111 No.3

GEN111回答回数472ベストアンサー獲得回数582007/03/27 19:03:34

ポイント10pt

1)

$id = $_ENV['QUERY_STRING'] ;

こんな感じで。


2)

ファイル counter.dat にデータを保存する場合。

<?php
$id = $_GET['id'] ;

$datfile = 'counter.dat' ;
$fp = fopen($datfile, 'r+') ;
flock($fp, LOCK_EX) ;

$id001 = (int)fgets($fp) ;
$id002 = (int)fgets($fp) ;

switch ($id) {
case '001' : ++$id001 ; break ;
case '002' : ++$id002 ; break ;
}

fseek($fp, 0) ;
fwrite($fp, "$id001\n$id002") ;
fclose($fp) ;

echo "id001=$id001<br/>id002=$id002" ;
?>

id が多くなればいちいち case を並べるのはスマートじゃないので別のやり方が必要になるかと思いますが。


p.s.)

test.jp は実在するので、例として用いる場合は example.com などを使いましょう。

http://neta.ywcafe.net/000501.html

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 escape1mgjp 29 24 0 2007-03-27 21:03:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません