2010-09-27 71 views
0

我有問題。我有一個由GET觸發器觸發的腳本。我正在嘗試使用fwrite和append來記錄腳本的執行情況,但是我發生的情況是,如果在另一個實例仍在寫入文件時調用某個實例,它將中斷fwrite並插入它自己的數據。如果文件正在寫入,有什麼辦法可以讓腳本排隊等待?但我不想丟失任何日誌數據。在php中同時登錄

在此先感謝!

回答

1

使用flock是一個非常糟糕的主意 - 然後進入計算文件應該鎖定多長時間的領域,明確掛起腳本的執行 - 各種各樣的尷尬。 PHP沒有併發文件訪問所需的那種文件鎖定語義。

更好的解決方案是:

  1. 寫日誌記錄到標準錯誤 - 那麼這些應該出現在Web服務器的error_log
  2. 使用syslog
  3. 使用trigger_error($msg, E_USER_NOTICE),並確保你的錯誤報告設置登錄到一個文件
  4. 將日誌條目寫入DBMS
1

你應該看看flock()大概。爲每個執行創建一個單獨的文件,然後通過鎖定較大的日誌文件來合併它們也可能是一個好主意,或者如果可行的話,您甚至可以考慮將所有內容發送到數據庫。