- ベストアンサー
PHPのアクセスカウンターバグについて
- PHPのアクセスカウンターのバグについて調査しました。
- アクセスカウンターが日にちが変わると正常に動作しない問題が発生しています。
- 解決策を教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
書き込むサイズが短くなる(前のデータの残骸が影響する)可能性があります。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);
その他の回答 (1)
- bimson
- ベストアンサー率40% (2/5)
たぶん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+にしときます!(≧∇≦)うりがとうございました!(^^)
お礼
お礼遅れました(。>A<。)すいません! ftruncate($fp, 0);これを記述したらちやんと動いてくれました(≧∇≦) 本当にありがとうございました!(^^)