引数なしでクリックされたのを調べたい
タイトルちょっとわかりづりらいですが、url等のリンクを踏んだ時にphpでそれを調べる方法が知りたいんです。
ダウンローダのランキングとかなら、urlに引数つけて、カウントファイルに書き込んで…と出来ますし、(例:ttp://example.com/di.php?dl=sample.jpg)引数つけなくても自鯖ならカウンタのようなもの埋め込めばわかる。
謎なのは外部のurlに飛ぶのに、引数なしでクリックされた数がわかるというもの。
あれってどういう仕組みなんだ。
url関連でもうひとつ謎なのがtwitterで長いurlだと短縮されるTinyURLの技術。
ここらへんの技術を上手く使えばいいのかなあ?ヒントご存知の方いましたらアドバイスを…
引数をつかってクリック数(ダウンロード数)調べるダウンローダなら作れました。
<?php //DLファイル入れてるディレクトリ $dir_name = "./data"; $dl = $_GET["dl"]; // 設定&カウントファイル名 $data_file = "./data.txt"; $filelist = array(); //サーバにあるファイルを取得して配列化 //アップローダと組み合わせたらいいんだけど今回は省略 if ($handle = opendir($dir_name)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $filelist[]=$file; } } closedir($handle); } //クリックされた時 if(isset($dl)){ //例によってレッツ!phpさんの拝借 // ファイルを読み込んで該当項目をカウントアップ $dat = file($data_file); for ($i=0; $i<count($dat); $i++) { // 項目名とカウントに分割("|"区切り) list($name, $vote) = explode("|", $dat[$i]); // 該当項目と一致したらカウント1増やして、該当行更新 if ($name == "$dl") { $vote += 1; $dat[$i] = "$name|$vote|\n"; break; // ループを抜ける } } //ファイル本体をDL $file_ad = "./data/".$dl; header('Content-Disposition: inline; filename='.$dl); header('Content-Type: application/octet-stream'); readfile($file_ad); // カウントファイル更新 $fp = fopen($data_file, "w"); flock($fp, LOCK_EX); fputs($fp,implode('', $dat)); fclose($fp); } //表示 $dat = file($data_file); for ($i=0; $i<count($dat); $i++) { // 項目名とカウントに分割("|"区切り) list($name, $vote) = explode("|", $dat[$i]); // 項目名をキーに投票数を要素にした配列を作る $cnt[$name] = $vote; } echo '<title>ダウンローダー</title>'; echo '<h2>ダウンローダー</h2>'; echo 'ファイル名 ダウンロード数<br>'; for($i=0; $i<count($filelist); $i++){ $f_name=$filelist[$i]; //echo "$filelist[$i]<a href=\"dr.php?dl=$filelist[$i]\">ダウンロード</a><br>"; echo "$f_name <a href=\"dr.php?dl=$f_name\">Download</a>[$cnt[$f_name]]<br>"; } ?>
細かいエラーチェック等はしてません。動作確認もUPしてません。
設定ファイルは手動(アップローダ作るならファイル名連番にして自動にするんですが今回は省略)