日誌 - php 讀寫檔案多大比較合適?

來源:互聯網
上載者:User
關鍵字 日誌 php file
在使用workman 一個php方面的定時 計劃任務架構。
通過 定時 寫入日誌來記錄定時任務成功還是失敗,當記錄檔大小為70M的時候級計劃任務斷掉了,後台讀取日誌也不能讀取了。
請教一下,php 寫入記錄檔 或者讀取記錄檔,一般記錄檔為多大比較合適?看往上有文章說1G的記錄檔也能讀取,但是普通網站如何來控制記錄檔的大小?

回複內容:

在使用workman 一個php方面的定時 計劃任務架構。
通過 定時 寫入日誌來記錄定時任務成功還是失敗,當記錄檔大小為70M的時候級計劃任務斷掉了,後台讀取日誌也不能讀取了。
請教一下,php 寫入記錄檔 或者讀取記錄檔,一般記錄檔為多大比較合適?看往上有文章說1G的記錄檔也能讀取,但是普通網站如何來控制記錄檔的大小?

有可能並發高時,同時讀寫同一個檔案時鎖住了。
對於讀檔案時,只要不fopen一個檔案,多大都沒關係,100G的檔案也是沒問題的
使用fgets方法開啟一個檔案的指標,然後迴圈一行一行讀取檔案的方式不會有問題的。

不大懂後端,但是感覺這樣的資料不是應該在伺服器上配置嗎? 或者 php.ini 配置?

無論多大都能讀寫。就看你怎麼讀。是一次讀一行,不是整個檔案都讀到記憶體裡。

是不是逾時了?預設php已耗用時間是30秒,你這種情況應該把逾時設為無限制,好像是時set_time_limit(0);吧,不太記得了。

多大都是沒問題的。
但是執行是有時常限制的(也就是大家說的set_time_limit)
但是把它改成0, 一旦某個步驟出了問題(比如資料庫無法串連),會造成大量進程無法結束,從而耗盡系統資源。

所以建議你調用 shell_exec , 使用cli模式執行處理日誌的那個php指令碼

php.ini max_execution_time memory_limitphp-fpm.conf request_terminate_timeout

有可能是記憶體超出配置最大值,或者執行時間超過限制.

file_get_contents和file是把整個檔案讀入記憶體.
所以開啟大檔案時應該用fopen,擷取檔案指標(檔案流),然後fgets一行一行讀.
http://cn2.php.net/fgets

不知道你用的這個架構是用什麼方式來寫入記錄檔的,我用的是PHP內建的error_log()函數,工作方式是一直append新日誌到檔案末尾,實際試過大到幾個G都沒任何問題,可能因為它是只往檔案末尾寫,不讀取。
按我的理解,既然是記錄是否成功的記錄檔,應該只用寫入、不用讀出吧?你可以試試分析架構的日誌寫入部分代碼,看看邏輯是怎樣的。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.