亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP造日志輪子的經(jīng)驗(yàn)

Gemini / 777人閱讀

摘要:對于的擴(kuò)展開發(fā)是心有余而力不足,所以只能放棄心愛的,自己來造個(gè)簡單的日志輪子了。以上是故事背景,下面開始講造輪子的收獲。以上四步看似走了一圈冤枉路,但是學(xué)習(xí)到的經(jīng)驗(yàn)還是很值得分享的。

最近準(zhǔn)備升級PHP7,發(fā)現(xiàn)同時(shí)使用yaf和seaslog擴(kuò)展時(shí)會(huì)導(dǎo)致流量上升時(shí)php-fpm子進(jìn)程的crash,在php-fpm.log中可以看到以下warning記錄,最終引起請求中斷。

WARNING: [pool www] child 15148 exited on signal 6 (SIGABRT) after 337.885989 seconds from start

經(jīng)過動(dòng)手實(shí)驗(yàn),發(fā)現(xiàn)只要加載了seaslog.so,即使不調(diào)用它的方法,仍然存在上述問題,推測是seaslog擴(kuò)展的RINIT和RSHUTDOWN里面的處理有問題,但是檢查不出來是什么問題。對于PHP的擴(kuò)展開發(fā)是心有余而力不足,所以只能放棄心愛的seaslog,自己來造個(gè)簡單的日志輪子了。

以上是故事背景,下面開始講造輪子的收獲。

第一步,簡單地實(shí)現(xiàn)功能,對文件進(jìn)行寫操作。

$fp = fopen($file, "a");
fwrite($fp, $log);
fclose($fp);

第二步,考慮文件鎖,高并發(fā)場景下有可能會(huì)把日志寫亂。

$fp = fopen($file, "a");
if (flock($fp, LOCK_EX)) {
    fwrite($fp, $log);
    flock($fp, LOCK_UN);
}
fclose($fp);

第三步,考慮到寫日志只是一個(gè)很簡單的應(yīng)用場景,不需要考慮讀文件時(shí)的數(shù)據(jù)一致性,為了提高效率我們可以改良一下這個(gè)文件鎖。假設(shè)程序所在的文件系統(tǒng)的塊的空間大小是4096字節(jié),小于這個(gè)這個(gè)長度的日志可以直接寫文件,否則要先搶占文件鎖再寫文件。

$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字節(jié),可以退回到第一步的代碼,而且還有一個(gè)選擇,和依次調(diào)用 fopen(),fwrite() 以及 fclose() 功能一樣。

file_put_contents($file, $log, FILE_APPEND);

以上四步看似走了一圈冤枉路,但是學(xué)習(xí)到的經(jīng)驗(yàn)還是很值得分享的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21460.html

相關(guān)文章

  • PHP程序員如何優(yōu)雅搬磚

    摘要:這是年前的最后一篇文章,本章來聊一聊程序員如何優(yōu)雅的搬磚搬磚既為達(dá)到目的,不斷重復(fù)某項(xiàng)工作的行為,其實(shí)與造輪子一樣,不謀而合基礎(chǔ)這里的基礎(chǔ)并非單指其技術(shù)能力,技術(shù)底蘊(yùn),更有意體現(xiàn)程序員在初期不斷重復(fù)的工作而獲得的感想與意識。 showImg(https://segmentfault.com/img/bVbnSFx?w=800&h=444); 我一生的文章都會(huì)放在這里,我的博客,我希望每...

    妤鋒シ 評論0 收藏0
  • 【Copy攻城獅日志】踩坑小程序之can't read property 'of

    摘要:根據(jù)當(dāng)時(shí)的情境,是在微信開發(fā)者工具中刪掉該小程序然后重新載入就解決了,大家給出的結(jié)論是微信小程序開發(fā)者工具的。 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); ↑開局一張圖,故事全靠編...

    hsluoyz 評論0 收藏0
  • PHP相關(guān)

    摘要:的機(jī)器學(xué)習(xí)庫的機(jī)器學(xué)習(xí)庫,包括算法交叉驗(yàn)證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來的大會(huì)上,她將和大家分享在機(jī)器學(xué)習(xí)領(lǐng)域的全新可能。入門總結(jié)入門相關(guān),如安裝配置基本使用等。 基于 Swoole 開發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個(gè)新特性,可以基于 Swoole 使用 C++ 語言開發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊 PHP 內(nèi)置函數(shù)和類?,F(xiàn)在可以基于 Swoole 來編寫 PHP ...

    lewinlee 評論0 收藏0
  • Android OkHttp 史上最優(yōu)雅設(shè)置baseUrl

    前言 RxHttp截止本文發(fā)表已經(jīng)推廣了4個(gè)禮拜,目前已經(jīng)有了141個(gè)star,如下: showImg(https://user-gold-cdn.xitu.io/2019/5/20/16ad5f3b6d10d9be); 其中一文,Android 史上最優(yōu)雅的實(shí)現(xiàn)文件上傳、下載及進(jìn)度的監(jiān)聽更是得到了大神劉皇叔微信公眾號的推送,歡迎讀者關(guān)注劉皇叔微信公眾號「劉望舒」,每天都有精彩的文章推送,真的很棒...

    番茄西紅柿 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<