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 のようになっていました。
よろしくです。
No.1ベストアンサー
- 回答日時:
書き込むサイズが短くなる(前のデータの残骸が影響する)可能性があります。
fputsで書き出す前にftruncate($fp, 0);
としてください。
<?php
$txt = 'counter.txt';
$fp = fopen($txt, 'r+');
if($fp !== false){
if(flock($fp, LOCK_EX)) {
$counter = fgets($fp);//トータル 今日 昨日 日付
$count = explode(' ', $counter);
if(date('Ymd') != $count[3]) {
$count[3] = date('Ymd');
$count[2] = $count[1];
$count[1] = 0;
}
$count[0]++;
$count[1]++;
$counter = implode(' ', $count);
rewind($fp);
ftruncate($fp, 0);
fputs($fp, $counter);
flock($fp, LOCK_UN);}
}
fclose($fp);
お礼遅れました(。>A<。)すいません!
ftruncate($fp, 0);これを記述したらちやんと動いてくれました(≧∇≦)
本当にありがとうございました!(^^)
No.2
- 回答日時:
たぶん2行目の r+ のせいだと思います
fopenの r+ オプションとはファイルを開いてポインタを最初に持ってくるという方法です
つまり
12345678
というファイルを開いて
abcd
をfputsすると
abcd5678
となってしまいます
fopenのオプションを w+ にすれば大丈夫だと思いますが、fopenやfcloseを使わないで、file_get_contentsとfile_put_contentsを使うとわかりやすいと思います
お返事ありがとうです!(≧∇≦)
わかりました!次から file_get_contents やfile_put_contentsを使ってみます!
一応前の方の回答で動いていくれたのですが一応w+にしときます!(≧∇≦)うりがとうございました!(^^)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) vba シートコピーの不具合 1 2022/06/25 17:48
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
While文を使って配列の中身を全...
-
PHP SimpleXml unsetについて
-
テキストデータから指定行の削除
-
別ファイルの構造体の値を読み...
-
自動で番号を振りたい
-
CArrayの要素としてCStringArra...
-
Smartyでインクリメント
-
String だと「 ByRef引数の型が...
-
foreachの実行結果について
-
C言語の配列をPush(追加)する...
-
多次元配列の中で条件に合う要...
-
PHP 多次元配列変数のデータ受...
-
forとかで連番の変数を一気に格...
-
PHPにてクラスを配列にすること...
-
濁点のソート
-
foreachのなかで次のキーを参照...
-
foreachで上限回数指定方法また...
-
楽天トラベルで「京都の宿」が...
-
配列参照で$my_var=f('b')みた...
-
多次元配列を、1次元の配列にす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
stdClass Objectを連想配列のよ...
-
CSVデータの行数カウントをした...
-
ヒアドキュメントの中のfor文
-
複数行のデータのPOST処理に関して
-
C言語でCSVファイルの行数を読...
-
While文を使って配列の中身を全...
-
行数が30万件ほどあるCSVから、...
-
CSVファイルの最終行のデー...
-
csvの内容を行単位で削除したい
-
バイナリファイルの内容を、そ...
-
doxygenを使用する環境について
-
PHPで、CSVファイルを、指定し...
-
FortranのOPEN文
-
csvファイルを読み込み→上書き...
-
PHPでCSVの一部の行を編集したい
-
ラジオボタンのチェックの付け方。
-
Ethnaでのsection使用法
-
CSVデータを正規表現で抜き出せ...
おすすめ情報