
phpでアクセス解析を作っているのですが、
解析データをログファイルに書き込みする際に
たまにデータが全部消えてしまう現象に陥りました。
下記コードでログファイルに書き込み処理をしています。
どなたか原因が分かる方、ご教授お願いいたします。
// ログデータ処理
$logdata = file($counter->logfile);
list($time,$host) = explode("\t",$logdata[0]);// 比較のため直前のホスト取得
if($host != $counter->host and // 連続アクセスは処理しない
!$out_flag){// 除外ホストは処理しない
$str =
time()."\t".// 時間
$counter->host."\t".// ホスト
$counter->agent."\t".// ユーザーエージェント
$counter->referer."\t".// リンク元
"\t\n";
$lp = fopen($counter->logfile,"w");
$lock = flock($lp,LOCK_EX);
if($lock){
fputs($lp,$str);
$i = 1;
foreach($logdata as $value){
fputs($lp,$value);
$i++;
if($i >= $counter->loglimit){break;}// ログ上限に達したら抜ける
}
}
flock($lp,LOCK_UN);
fclose($lp);
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
fopen($counter->logfile,"w");の時点でファイルは空になっていますから、このタイミングで(ロックする前に)他からfile()で読んだら何もない状態です。
比較のための直前ホストの取得などはfile()で読み込んだものでもいいですが、実際に「書き込み」をするときには、"rw"で開く→ロック→全行を再取得→ファイルポインタを先頭に戻す→追加データ+再取得データを書き込み→ロック解除でないとマズイのでは?
この回答への補足
ご解答ありがとうございます。
具体的なコードが分からず困っております。
もし差し支えなければ教えていただければ幸いです。
どうかよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- Visual Basic(VBA) 【VBA】For文を使用し、行をコピーして別シートに貼り付ける方法を教えてください。 4 2022/07/19 09:01
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPについて質問です!!
-
被リンク元URL
-
sqlで日付が一番古いデータの月...
-
MySQLのdatetime型の月日0を削...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
microSDの装着による連続待受時...
-
mb_convert_encodingについて
-
ダウンロードすると画像が壊れ...
-
php.iniのエンコーディングの設...
-
「クラウドにアップロード」」...
-
どのように読み込んでるのでし...
-
session_startでクッキー範囲を...
-
phpでお問い合わせフォームを作...
-
ライブドアブログにPHPスクリプ...
-
引数を正しく読み込む方法
-
上位ディレクトリ名(フォルダ...
-
PHPスクリプトにプロキシを弾か...
-
path文字列の操作
-
初めまして、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlで日付が一番古いデータの月...
-
インクルードした部分が表示さ...
-
MySQLのdatetime型の月日0を削...
-
現在の観覧人数を表示したい
-
PHPで外部サイトの一部を取得し...
-
サーバーOS、バージョンの差...
-
PHPでのRAWデータの受け取り方
-
TwitterのURLからツイート内容...
-
同じ日付が取得できない
-
遷移前のページのクエリを取得...
-
取得したプロキシが生きている...
-
rewrite→リダイレクトURL→パラ...
-
サーバサイドで現在位置の取得
-
file_get_contentsで外部URLフ...
-
プロキシを通過してツイッターA...
-
phpでタグの座標位置を取得...
-
SSLと非SSL対応、且つ複数階層...
-
Twitterからのリファラを取得す...
-
phpについて 別ページのタイ...
-
PHPのsetcookieをjavascriptで取得
おすすめ情報