フラッシュとPHPを使用したカウンター
フラッシュからPHPにデータを送って、PHPからの返り値を利用するモデルとしての習作です。
そのため、日付をフラッシュで得てPHPに送るという馬鹿な仕様になっています。
flashcounter.fla
アクション-フレームに
targetURL = "http://hogehoge.com/flashcounter.php"; // Dateオブジェクトを作る todayTime = new Date(); // LoadVarsオブジェクトを作る sendData = new LoadVars(); // LoadVarsオブジェクトに送るデータを代入 sendData.year_today = todayTime.getYear(); sendData.month_today = todayTime.getMonth(); sendData.date_today = todayTime.getDate(); // sendDataをPOSTで送り、返値をsendDataに格納 // 送るデータが同じ場合リターンにキャッシュが使われるので時分秒などのデータを一緒に送ると良い sendData.sendAndLoad(targetURL, sendData); // GETで送りたい場合は // sendData.sendAndLoad(targetURL, sendData, "GET");
アクション-ムービーに
// CGIから返り値が返ってくるまで代入を繰り返させるために、代入はムービークリップで行う onClipEvent (load) { // コントロールムービークリップを不可視にする _visible = false; } onClipEvent (enterFrame) { _root.sendData.onLoad = function() { // 返り値を代入 _root.count = _root.sendData.count; _root.count_today = _root.sendData.count_today; _root.count_yesterday = _root.sendData.count_yesterday; }; }
flashcounter.php
$log_path = "flashcounter.dat"; $max_buffer = 1024; // POSTメソッドからデータをえる // PHPのバージョンによっては他の方法をとる $year_today = $_POST['year_today']; $month_today = $_POST['month_today']; $date_today = $_POST['date_today']; // 1月が0になるから $month_today++; // 整形して$dateに代入 if ($month_today < 10) { $month_today = "0" . $month_today; } if ($date_today < 10) { $date_today = "0" . $date_today; } $date = $year_today . $month_today . $date_today; // 読み書きモードでオープン $fp = @fopen($log_path, "r+") or die("ファイルが開けません"); $buffer = fgets($fp, $max_buffer); if ($buffer == "") { // 初アクセスの場合 $count[0] = 1; $count[1] = $date; $count[2] = 1; $count[3] = 0; } else { $count = preg_split ("/<>/", $buffer); $count[0]++; if ($count[1] != $date) { // 今日初アクセスの場合 $count[1] = $date; $count[3] = $count[2]; $count[2] = 1; } else { $count[2]++; } } $buffer = $count[0] . "<>" . $count[1] . "<>" . $count[2] . "<>" . $count[3]; // ポインタを先頭に、ロックして書き込み fseek($fp, 0); flock($fp, 2); fputs($fp, $buffer); // ファイルを閉じる fclose($fp); // フラッシュにデータを返す // 後ろに広告などが付く場合は . "&ad=" などを付加 $return_data = "count=" . $count[0] . "&count_today=" . $count[2] . "&count_yesterday=" . $count[3]; echo $return_data;
flashcounter.dat
// パーミッションを606にする