PHPを使用したページ表示ごとのカウントダウンスクリプト

このQ&Aのポイント
  • PHPを使用してページ表示ごとにカウントダウンを行うスクリプトを作成しました。
  • スクリプトでは、ページが表示されるたびにカウントダウン数が減っていきます。
  • しかし、カウントダウンが正常に動作せず、減少した数が正しく表示されない現象が発生しています。
回答を見る
  • ベストアンサー

ページ表示ごとにカウントダウンをさせたい。

こんばんわ。 こんなスクリプトを組んでみました。 phpは勉強を始めたばかりです。 <? echo "Hello world!!";?> <br> あなたのIPは <? echo $_SERVER["REMOTE_ADDR"]?> ですね? <br> ただいま<? print (date ("Y年m月d日(D) H時i分s秒"));?>です <br><br> <?php $fp = fopen ("count.txt","r+"); $count = fgets ($fp, 32); $count--; fseek($fp, 0); fputs($fp, $count); flock($fp,2); $count = sprintf("%05d", $count); fclose($fp); echo $count ?> ログファイルは初期値として、10としました。 が9までは正常に減っていくのですが、次に8にならずに 89になってしまいます。 よろしくお願いします。

  • xphp
  • お礼率53% (24/45)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

>fseek($fp, 0); >fputs($fp, $count); この書き方ですとファイルの先頭から上書き (今回の場合ですと10の1文字目「1」を「9」に上書き) するので90となってしまいます。 ですので ftruncate($fp,0); //ファイルサイズを0にする fseek($fp, 0);//ポインタを先頭に fputs($fp, $count); //書込み のようにすればよいと思います。

xphp
質問者

お礼

大変丁寧な解説、誠にありがとうございます。 ちゃんと動きました。ありがとうございました。!!

関連するQ&A

  • 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
  • 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である処理をすると数を1足して、ある処理をするとその数字から1引

    phpである処理をすると数を1足して、ある処理をするとその数字から1引くような事をしたいのですが、上手くいきません。(まれに数字にずれが生じてしまいます。) 1足していくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count == ""){ $registry_count = 0; } $registry_count++; flock($fp,LOCK_EX); fseek($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); 1引いていくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count != "0"){ $registry_count--; } flock($fp,LOCK_EX); fseek($fp,0); ftruncate($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 何がおかしいのでしょうか?

    $filename1 = 'ymd.dat'; $fp1 = fopen($filename1, "r+"); $day2 = fgets($fp1,9); $day = date('Ymd'); //今日のアクセス数カウント。日付が変われば0になる。 $filename2 = 'ymd2.dat'; $fp2 = fopen($filename2, "r+"); $count2 = fgets($fp2,32); if($day==$day2){ $count2++; fseek($fp1, 0); fputs($fp1, $day); fclose($fp1); }else{ $count2 = 0; fseek($fp1, 0); fputs($fp1, $day); fclose($fp1); } fseek($fp2, 0); fputs($fp2, $count2); fclose($fp2);

    • 締切済み
    • PHP
  • phpで引き算が上手くいかない

    データの引き算で書き出す際に予期しない数字になってしまって 困っております。 data.datに10となっていた際に、下記のコードを実行すると90になってします。本当は9にしたいのですが、どこに原因があるのかわからずにおります。 どなたかご教授ください。 宜しくお願いいたします。 $fp = fopen("data.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count != "0"){ $registry_count--; } flock($fp,LOCK_EX); fseek($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp);

    • ベストアンサー
    • 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
  • カウンターを一定数でリセットしたい

    はじめまして。 レッツ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
  • 二重カウント防止

    フリーのカウンタに2重カウントを防止出来るようにいろんなHP見て直したのですが、カウンタ自体動作しなくなりました。どこを直せばよいのでしょうか // 連続カウント防止(yes=1 no=0) $ip_check = 1; //------------ここまで---------- $fp = @fopen($log, "r+") or die($log."が開けません"); $count = fgets($fp, 64); //最大64バイトまで読み込む if(($ip_check == 1 && "$ip" != $_SERVER["REMOTE_ADDR"]) || $ip_check == 0){ $cnt++; $new_data = implode("<>", array($cnt,$_SERVER["REMOTE_ADDR"])); } fseek($fp, 0); //ファイルポインタを先頭に移す flock($fp, 2); //書き込みに対しロック fputs($fp, $count); //ファイルに書き込む fclose($fp); //ファイルをクローズ //桁数のフォーマット $cnt = sprintf(sprintf("%%0%dd", $fig), $count); //画像のサイズオプションを0.gifで取得 $size = getimagesize($path."0.gif"); //IMGタグを出力 for ($i=0; $i<strlen($cnt); $i++): //桁数分だけループ $n = substr($cnt, $i, 1); //左から一桁ずつ取得 echo "<IMG SRC=\"$path$n.gif\" alt=$n $size[3]>"; endfor;?>

    • 締切済み
    • PHP
  • 同じような処理を一つにまとめたい

    count.txt <?php $dis123=0; $dis001=0; $hoge01=0; ?> ___________ counter.php <?php $vote = $_GET[vote]; $fp = fopen("count.txt", "r+"); include("count.txt"); @flock($fp,LOCK_EX); //今現在(カウント前)の値を書き込む fputs($fp,"<?php \$dis123=$dis123; ?>\n"); fputs($fp,"<?php \$dis001=$dis001; ?>\n"); fputs($fp,"<?php \$hoge01=$hoge01; ?>\n"); //GETで得た情報からカウントした物に+1して書き込む if ($vote===dis123){ ++$dis123; fputs($fp,"<?php $$vote=$dis123; ?>\n"); } if ($vote===dis001){ ++$dis001; fputs($fp,"<?php $$vote=$dis001; ?>\n"); } if ($vote===hoge01){ ++$hoge01; fputs($fp,"<?php $$vote=$hoge01; ?>\n"); } flock($fp,LOCK_UN); fclose($fp); echo "dis123は".$dis123."点<br>"; echo "dis001は".$dis001."点<br>"; echo "hoge01は".$hoge01."点<br>"; ?> _________________________________ 処理: counter.php?vote=dis123ときたらif処理して$dis123に+1する ________________________ 今は三つだからまだ大丈夫ですが、これが増えてくると手間が多いです そこで上記の今現在の値の書き込みとIF処理の部分を代入など、なんらかの形で簡略化できませんでしょうか?大改編になっても結構です。 よろしくお願いします。 備考:PHP暦三日目です、ここまでなんだかんだがんばったと思う。

    • ベストアンサー
    • PHP
  • ファイルについて・・・。

    お願いいたします。 以下のソースは"samplefile.txt" が前提としてあることになって いますが、もしなかった場合このテキストファイルを作り出す仕組みをソースに加えたいんですが・・・。 2,3行目の間に「もしファイルがみあたらない時は・・」みたいな条件をつける??くらいしか自分の頭では思い浮かばず・・・ 何かアドバイスいただけないでしょうか??お願いいたします。 1 <?php 2 $fp = fopen("samplefile.txt", "a+"); 3 $count = fgets($fp, 15); 4 $count = $count++; 5 rewind($fp); 6 fputs($fp, $count); 7 fclose($fp); 8?> 9<p>あなたは <?php echo $count; ?> 人目のお客様です。

    • ベストアンサー
    • PHP

専門家に質問してみよう