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ランキング
-
CSVファイルの最終行のデー...
-
stdClass Objectを連想配列のよ...
-
CSVデータの行数カウントをした...
-
C言語でCSVファイルの行数を読...
-
PHPでCSVの一部の行を編集したい
-
phpの関数について質問です!
-
Resource id #3 と表示されま...
-
文字列(丸数字)の文字化けに...
-
csvの内容を行単位で削除したい
-
複数行のデータのPOST処理に関して
-
自動で番号を振りたい
-
カンマ区切りのCSVについて
-
【PHP】csvファイルへの書き出...
-
別ファイルの構造体の値を読み...
-
ヒアドキュメントの中のfor文
-
プログラミングのPythonのnoteb...
-
配列をループでたくさん宣言し...
-
プルダウンメニューにDBの内容...
-
多次元配列の計算方法について
-
PHPのPOSTでの半角スペース
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
複数行のデータのPOST処理に関して
-
エラーメッセージ(無効な間接...
-
Resource id #3 と表示されま...
-
ヒアドキュメントの中のfor文
-
自動で番号を振りたい
-
C言語でCSVファイルの行数を読...
-
配列同士の足し算のループ処理
-
stdClass Objectを連想配列のよ...
-
PHPでCSVの一部の行を編集したい
-
phpを実行するとファイルダウン...
-
行数が30万件ほどあるCSVから、...
-
phpでCSVファイルの中身を多次...
-
php Undefined variableエラー
-
CSVデータの行数カウントをした...
-
csvの内容を行単位で削除したい
-
複数ファイルで、それぞれの行...
-
テキストデータから指定行の削除
-
rubyで複数列のデータを一行に...
-
PHP5でCSVの指定行データだけを...
おすすめ情報