• ベストアンサー

【PHP】アクセスカウンターが空回りしてしまいます。

はじめて投稿します。 今まで無料アクセスカウンターをつけていたページを、 PHPにして、自作のアクセスカウンターを乗っける作業を しています。 来訪者にCookieをつけて、期限が切れるまでカウンターを 反応させないようにするつもりです。(ブラウザを閉じるまで) ローカルではうまく動くのですが、サーバに乗せてみると カウンターが空回りしてしまいます。 正直、どう手直ししていいか見当がつきません。 アドバイスをお願いします。 【おそらく問題のロジックの部分】 //$fp=fopen("count.txt","r+"); //$count=fgets($fp,8); //来場者数のファイルを読み取って必要な桁だけ入手。 //if(empty($_COOKIE["aaa"])){ // setcookie("aaa","on"); // $count++; // } //cookieが空の場合のみ、新たにcookieを作り来場者数に1足す。 //rewind($fp); //fputs($fp,$count); //fclose($fp); //ファイルに値を書き込んで閉じる

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

ブラウザの設定でクッキーが受け入れられていないということはありませんか?

kou1956
質問者

お礼

返事が遅くなりまして大変申し訳ありませんでした。 ヒントを元にcookieについて一から調べなおしたところ、 cookieの仕組みについて勘違いしていました。 setcookie関数をレスポンスボディで使っていたため、 cookieの書き込みが行われていなかったようです。 setcookieを<html>タグより先に書き込むことで解決しました。 まだ完成してはいませんがずっと引っかかっていた箇所から 一歩進めました。 どうもありがとうございました

その他の回答 (1)

回答No.2

count.txtに書き込み権なかったりして・・

kou1956
質問者

お礼

回答どうもありがとうございました。 書き込み権限については大丈夫でした。

関連するQ&A

  • PHPのアクセスカウンターのバグについてです!

    PHPを勉強しているものですが アクセスカウンターをネットで調べ自分なりに書いたのですが 日にちが変わるとトータル、今日、昨日が全く動かなくなります。 どこをどうすればいいのか教えていただけないでしょうか? お願いします。 $txt='counter.txt'; $fp=fopen($txt,'r+'); if($fp!==false){ if(flock($fp,LOCK_EX)){ $counter=fgets($fp);//トータル 今日 昨日 日付 $count=explode(' ',$counter); if(date('j') != $count[3]){ $count[3]=date('j'); $count[2]=$count[1]; $count[1]=0; } $count[0]++; $count[1]++; $counter=implode(' ',$count); rewind($fp); fputs($fp,$counter); flock($fp,LOCK_UN);} } fclose($fp); ちなみにバグはトータル→今日→昨日→日付の順です。 500 1 1 262625 のようになっていました。 よろしくです。

    • ベストアンサー
    • PHP
  • PHPでアクセスカウンタ

    表題どおりのシンプルな質問なんですけど、加算されません。 テキストにあるコードは: ### 011_counter.php ### <?php $fp=fopen("012_count.txt","r+");// 読み書きモードでオープン $n=fgets($fp); // 文字列の読み取り $n++; // カウントアップ echo $n,"人目"; // 表示 rewind($fp); // 読み書き位置を先頭に戻す fputs($fp,$n); // 書き込み fclose($fp); // ファイルを閉じる ?> ### 012_count.txt ### 0 ※このファイルは0のみで、この0の後には改行コードはありません これでhttp://localhost/php/011_counter.phpにアクセスすると 0 人目 が表示されます。 ただ、F5を押しても、他のサイトを見てまたアクセスしても変わりません。 012_count.txtの内容を3にすると、3 人目になりますが加算はされません。 テキストには「0の後に改行を入れると加算されない」とあるので、特に注意して改行を入れないようにしています。 OSはLinux Knoppix/Math2010です (Windows VistaにVMWare Playerを載せて、その上で走らせています)。 PCはTOSHIBAのSatelliteでメモリ4GB、ハードディスク250GBです。 PHP 5.2.11-1 with Suhosin-Patch 0.9.7 (cli)です。 ブラウザはIceweasel3.5.5です。 最初に書き換えの権限でエラーが出たので chmod -R 777 php chmod 777 012_count.txt も確実に行っています。 正しく加算されるようにするにはどうしたらよいのですか?

    • ベストアンサー
    • PHP
  • アクセスカウンターが更新されない(PHP)

    サーバーに count.txt というファイルを置いて 下記のようなPHPで更新するものを作りました。 <? $fp = @fopen("count.txt","r+") or die("ファイルが開けません");//読み書きモードでオープン flock($fp, LOCK_EX); $count = fgets($fp, 64); //64バイトorEOFまで取得、カウントアップ $count++; rewind($fp); //ポインタを先頭に、ロックして書き込み fputs($fp, $count); fclose($fp); //ファイルを閉じる echo $count; //カウンタ表示 ?> しかしながらカウンターは更新されません count.txt、の属性は666としてあります。 FTPを実行して 左右の窓の右側がサーバ側なので その中の、count.txt、を実行すると メモ帳で実行(ダブルクイック)し なかに書かれている数字を(たとえば100とあったものを101と書き換える)変更し 終了すると count.txtは更新されています、保存しますか と聞いてくるので、はい(Yes)で答えて、閉じ また開くと、100のままなのですが なにが原因か推定できないでしょうか? そのディレクトリー自体(ublic_htmlですが)の属性も書き込み可としても ダメでした。

    • 締切済み
    • PHP
  • PHPアクセスカウンター

    <?php $filename = 'count.dat'; $fp = fopen($filename, "r+"); $count = fgets($fp,32); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); echo ($count); ?> これを日付が変わったら0にリセットしてくれるシステムにしたいんですが、どうしたらいいですか??

    • ベストアンサー
    • PHP
  • PHPにてアクセスカウンターを作成してるのですが

    PHPを勉強しているのですが、以下のプログラムで画像アクセスカウンターを作成してるのですが、 <?php $date_now = date("Y/m/d"); $cookie = $date_now; setcookie("Cookie",$cookie); ?> <html><head></head><body> <?php $data_file = './access.dat'; $fp = fopen("$data_file", "r+"); $cnt_num = fgets($fp, 64); if($Cookie != $date_now){ $cnt_num++; fseek($fp, 0); flock($fp,2); fwrite($fp, $cnt_num); } fclose($fp); $f_pass = './a_gif'; for($i = 0; $i < strlen($cnt_num); $i++) $value[ ] = substr($cnt_num, $i , 1); for($j = 0; $j < count($value); $j++) echo "<img src=$f_pass/" . $value[$j] . ".gif>"; ?> </body> </html> うまく表示できません。 access.datに何か記述するのでしょうか? a_gifファイルに画像も入れてるのですがパーミッションなどを変更するのでしょうか? 作業環境はWindowsXPを使用してます。 サーバーはロリポップにて借りてます。 一応access.datのパーミッションは666に設定してます。

    • 締切済み
    • PHP
  • PHPカウンタのデータファイルのパスについて

    PHPカウンタのデータファイルをひとつ上の階層に置いて3つのページで共有したいのですが、 $fp="fopen("counter.dat"," "r+"); 上記パスを $fp="fopen("../counter.dat"," "r+"); このように記述するとエラーになってしまいます。 やり方が間違ってますでしょうか? 以下ソースです。 <?php $fp="fopen("counter.dat"," "r+"); $count=fgets($fp, 6); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); ?><BR> <?php echo sprintf('%05d',$count); ?> 初心者の質問で申し訳ありませんが、 ご回答のほどよろしくお願い致します。

    • ベストアンサー
    • PHP
  • a.phpにあるアクセスカウンターの数値を取得する

    質問を出すのは初めてでプログラム1年生です。 質問内容は a.phpにあるアクセスカウンターの数値をb.phpに呼び出したいのですが、可能なのでしょうか?? ちなみにb.phpではアクセスカウントを増やしたくありません。 <form>で括り$_GETで呼び出すなどしましたが、1度a.phpから飛ばないと表示されませんでした。 いろいろ類似する質問や記事を見て試行錯誤しましたが、どうしても表示されません。 どなたか教えていただけたら幸いです。 a.phpで記載している内容です。 <?php $counter_file = 'counter.txt'; $counter_lenght = 8; $fp = fopen($counter_file, 'r+'); if ($fp){ if (flock($fp, LOCK_EX)){ $counter = fgets($fp, $counter_lenght); $counter++; rewind($fp); if (fwrite($fp, $counter) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); } } fclose($fp); print('COUNT:'.$counter); ?> b.phpで記載している内容です。 <?php ob_start(); include("a.php"); ob_clean(); print $counter; ?> 私の取って付けたような知識では太刀打ちできませんでした。 どうかお助け願います。

    • ベストアンサー
    • PHP
  • カウンターを一定数でリセットしたい

    はじめまして。 レッツPHPのカウンタを使っています。 <?php $fp = fopen("count.txt","r+") or die("Error!"); $count = fgets($fp, 64); $count++; rewind($fp); //set_file_buffer($fp, 0); flock($fp, LOCK_EX); fputs($fp, $count); fclose($fp); echo $count; ?> count_file.txt にはA00と記入しているのでA99になったら次はB00~Z99までカウントされるのを、F99まできたらリセットしA00から始めたいのですが式が分りません。$count++;を書き換えればいいのだとは思いますが・・・ よろしくお願いいたします。 PHP4.3.3

    • ベストアンサー
    • PHP
  • カウンターの数値が上がらないです・・・

    初歩的な質問ですみません。アクセスカウンターを作っているのですが、カウントがあがりません。一応1と表示されるのですが増えませんし、count.txtみても0となっていて書き込まれてもいないようです。属性は666にしてあります。サイトは・・・ http://s1.muryo-de.etowns.net/~yuki/ です。 <?php $fp = fopen("count.txt", "r+"); $count = fgets($fp, 10); $count = $count + 1; fseek($fp, 0); fputs($fp, $count); fclose($fp); ?> <div align="center"><p>あなたは <?php echo $count; ?> 人目のお客様です。</p></div> お願いします。m(__)m

    • ベストアンサー
    • PHP
  • 訪問回数が素数の場合、違うメッセージがでる訪問カウンター

    質問お願いします。 訪問回数が素数の場合、違うメッセージが出る訪問カウンター を作成しています。 まず、訪問回数が出るカウンターはできました(2) 素数の場合がよくわからないので、とにかく"奇数"で 違うメッセージがでるようにしました(1)が、 まず(1)と(2)をうまく組み合わせられませんでした。 そして、素数かどうかを割り出す方法は調べてわかったのですが、 素数の場合・・・となるとわからなくて。 (考え途中のため、以下のソースは完成してないところ有りです。 中途半端ででみませんです。。) <?php //(1) if(($yes= % 2)== 0){ print("奇数ではないです。"); }else{ print("奇数です。"); }  //(2)アクセスカウンター  $file = touch("sample.txt"); $fp = fopen("sample.txt","r+"); $count = fgets($fp, 10); $count = $count + 1; fseek($fp,0); fputs($fp, $count); fclose($fp); ?> <p> あなたは <?php echo $count; ?> 人目のお客様です。

    • ベストアンサー
    • PHP

専門家に質問してみよう