摘要:對于的擴展開發是心有余而力不足,所以只能放棄心愛的,自己來造個簡單的日志輪子了。以上是故事背景,下面開始講造輪子的收獲。以上四步看似走了一圈冤枉路,但是學習到的經驗還是很值得分享的。
最近準備升級PHP7,發現同時使用yaf和seaslog擴展時會導致流量上升時php-fpm子進程的crash,在php-fpm.log中可以看到以下warning記錄,最終引起請求中斷。
WARNING: [pool www] child 15148 exited on signal 6 (SIGABRT) after 337.885989 seconds from start
經過動手實驗,發現只要加載了seaslog.so,即使不調用它的方法,仍然存在上述問題,推測是seaslog擴展的RINIT和RSHUTDOWN里面的處理有問題,但是檢查不出來是什么問題。對于PHP的擴展開發是心有余而力不足,所以只能放棄心愛的seaslog,自己來造個簡單的日志輪子了。
以上是故事背景,下面開始講造輪子的收獲。
第一步,簡單地實現功能,對文件進行寫操作。
$fp = fopen($file, "a"); fwrite($fp, $log); fclose($fp);
第二步,考慮文件鎖,高并發場景下有可能會把日志寫亂。
$fp = fopen($file, "a"); if (flock($fp, LOCK_EX)) { fwrite($fp, $log); flock($fp, LOCK_UN); } fclose($fp);
第三步,考慮到寫日志只是一個很簡單的應用場景,不需要考慮讀文件時的數據一致性,為了提高效率我們可以改良一下這個文件鎖。假設程序所在的文件系統的塊的空間大小是4096字節,小于這個這個長度的日志可以直接寫文件,否則要先搶占文件鎖再寫文件。
$fp = fopen($file, "a"); if (strlen($log) <= 4096) { fwrite($fp, $log); } else if (flock($fp, LOCK_EX)) { fwrite($fp, $log); flock($fp, LOCK_UN); } fclose($fp);
If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem"s block size, on some platforms, and as long as the file is on a local filesystem). That is, there is no need to flock() a resource before calling fwrite(); all of the data will be written without interruption.
第四步,如果我們的日志長度幾乎全是小于4096字節,可以退回到第一步的代碼,而且還有一個選擇,和依次調用 fopen(),fwrite() 以及 fclose() 功能一樣。
file_put_contents($file, $log, FILE_APPEND);
以上四步看似走了一圈冤枉路,但是學習到的經驗還是很值得分享的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21460.html
摘要:這是年前的最后一篇文章,本章來聊一聊程序員如何優雅的搬磚搬磚既為達到目的,不斷重復某項工作的行為,其實與造輪子一樣,不謀而合基礎這里的基礎并非單指其技術能力,技術底蘊,更有意體現程序員在初期不斷重復的工作而獲得的感想與意識。 showImg(https://segmentfault.com/img/bVbnSFx?w=800&h=444); 我一生的文章都會放在這里,我的博客,我希望每...
摘要:根據當時的情境,是在微信開發者工具中刪掉該小程序然后重新載入就解決了,大家給出的結論是微信小程序開發者工具的。 Created 2019-4-2 22:17:34 by huqiUpdated 2019-4-2 23:17:34 by huqishowImg(https://segmentfault.com/img/bVbqOLH?w=1526&h=818); ↑開局一張圖,故事全靠編...
前言 RxHttp截止本文發表已經推廣了4個禮拜,目前已經有了141個star,如下: showImg(https://user-gold-cdn.xitu.io/2019/5/20/16ad5f3b6d10d9be); 其中一文,Android 史上最優雅的實現文件上傳、下載及進度的監聽更是得到了大神劉皇叔微信公眾號的推送,歡迎讀者關注劉皇叔微信公眾號「劉望舒」,每天都有精彩的文章推送,真的很棒...
閱讀 2841·2021-09-10 10:50
閱讀 2197·2019-08-29 16:06
閱讀 3200·2019-08-29 11:02
閱讀 1102·2019-08-26 14:04
閱讀 2813·2019-08-26 13:24
閱讀 2306·2019-08-26 12:16
閱讀 554·2019-08-26 10:29
閱讀 3102·2019-08-23 18:33