php监听网页日志,如何用php程序监听一个不断增长的日志文件
首先這個日志文件寫入不是很頻繁,它每一行就是一條有效的日志。我想php程序來監聽這個文件,每當被寫入一行的時候,我的php就自動讀入一行,做出分析然后做相應的處理。請問要如何實現呢?
回復內容:
首先這個日志文件寫入不是很頻繁,它每一行就是一條有效的日志。我想php程序來監聽這個文件,每當被寫入一行的時候,我的php就自動讀入一行,做出分析然后做相應的處理。請問要如何實現呢?
基本原理如iCode所說。具體實現上,最簡單的方式是:while(1) {
檢查文件長度或者文件修改時間
如果有改變,則從當前點往后讀取
sleep一定時間
}
缺點是程序寫的有問題的話,長時間執行的php容易最后崩潰。
當然,可以不用上面的循環sleep,改用記住最后讀取位置的方式,然后把檢查代碼放進cron,這樣每次php執行完畢即回收資源,不容易崩潰,但會有不到1分鐘的時延。可以結合前面的辦法,讓程序執行1分鐘左右即退出來緩解時延問題,但要注意前一個進程尚未退出后一個進程即已經啟動的競爭問題。
另外,linux下已經有inotify,php里也有對應的ext,可以監聽指定文件的寫入事件。優點是完全內核實現,事件回調機制,cpu占用極低,缺點是得安裝擴展,另外得熟悉一下inotify的用法。
以上方法都需要注意的是,有可能檢測到變化的時候,寫入程序還沒有完成一個完整的行,需要在檢查程序里做個buffer,當檢測到buffer里出現\n的時候才能認為是一行結束。
希望以上對你有幫助。
stat 得到最后修改時間 ...
fseek 定位到最后一行 ... fread 讀 ...
相關標簽:php 日志
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php监听网页日志,如何用php程序监听一个不断增长的日志文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有没有可以搜PHP作业的软件,有没有可以
- 下一篇: php 检查字符串类型,PHP之字符串类