人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

おねがいします

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP アクセスカウンター カウント ソース プログラム
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● いのくに
●35ポイント

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>";
?>

などでどうでしょうか?

◎質問者からの返答

ありがとうございます!

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

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


2 ● いのくに
●35ポイント

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

◎質問者からの返答

ありがとうございます!


3 ● GEN111
●10ポイント

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ