![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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ランキング
-
sqlで日付が一番古いデータの月...
-
[php初心者]サイトを見てデータ...
-
別ファイルの変数を呼び出した...
-
mb_send_mailを実行するとエラ...
-
PHPファイルの中身が見られるこ...
-
$_SERVER と $_ENV の違い
-
お名前comのPHPとmysqlの接...
-
複数ファイルを連続でダウンロード
-
ボタンのクリック数を合計保存...
-
これからのPHP開発ではPDOを選...
-
URLの中の~の記号の意味は?
-
VB6にてメールを送信する方法
-
AccessのDoCmd.SendObjectについて
-
$str=preg_replace('/\\u3000/'...
-
PHPでの複数ファイル出力
-
makefile でファイルをコピーす...
-
携帯で撮影した画像をサーバー...
-
PHPでUNIXシステムコマンド...
-
BASIC認証のユーザー名をPHPで...
-
PHP mb_send_mailが使えない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インクルードした部分が表示さ...
-
MySQLのdatetime型の月日0を削...
-
指定した期間の日付生成
-
現在の観覧人数を表示したい
-
sqlで日付が一番古いデータの月...
-
Twitterからのリファラを取得す...
-
PHPのsetcookieをjavascriptで取得
-
ポータルサイトの店舗単位のア...
-
取得したプロキシが生きている...
-
TwitterのURLからツイート内容...
-
★★xmlの「イコール」の部分のデ...
-
PHPで外部サイトの一部を取得し...
-
携帯用Web画面のリファーラ値の...
-
3ヶ月後の日時を取得する方法
-
パスからディレクトリの名前だ...
-
自サイトにRSSを取り込みたい
-
MIB取得について
-
HTTP_REFERERが使えない
-
ブログサービスでのリファラ取...
-
vb2005にてhtmlソースの中のあ...
おすすめ情報