①http://test.jp?id=001
とします。
これをhttp://test.jp?001
としてid=を省略する記述を見たことがあります。
この場合はソースはどう処理されていますか?
②http://test.jp?id=001
http://test.jp?id=002
を作ります。その際にアクセスカウンターを作ります。
001に何人。
002に何人。
という風にカウントするにはどういうプログラムにすればいいですか?
おねがいします
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アクセスあることにしたんですか?
例として 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); // ファイルを閉じる。 ?>
ありがとうございます!
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 などを使いましょう。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | escape1mgjp | 29回 | 24回 | 0回 | 2007-03-27 21:03:53 |
ありがとうございます!
でももう少し詳しくご説明を頂きたいので再度質問いたします。
002を20にしたのは何故ですか??20アクセスあることにしたんですか?