Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

PHP 在 background 處理資料的另一種方法

Posted on 2021 年 3 月 24 日2021 年 3 月 24 日 By 日落 在〈PHP 在 background 處理資料的另一種方法〉中尚無留言

一般用 PHP 實作 background task,大多都是先將 task 處理後再處理 user request。
所以程式大概是長這樣:

<?php

class Contrller
{
    public function handle()
    {
        if (Background::hasTask()) {
            Background::run();
        }

        $data = List::whereIn('id', [1, 4, 6])->get();
        view($data);
}

這樣做會有一些缺點,若背景程式跑了很久才結束,會讓使用者有一種「點了按鍵卻感覺沒有回應」的錯覺。

若有時候真的累積不少 background task 需要處理時,為了不讓使用者等太久,通常會 trigger 一些專為 background task 設定的程式去執行,像是一群的 consumer,或者會 trigger gearman 去處理。

而我再某一次很罕見的狀況下必須馬上讓使用者先收到 reponse 之後才去處理 background task。問題來了:通常都要 PHP return / exit 以後,response 才會傳回 client,那有什麼辦法先給已經處理好的 response,讓 client 繼續瀏覽以後再來跑 background task?

沒想到還真的讓我找到解法:fastcgi_finish_request()。

fastcgi_finish_request()這個函式會先通知 fastcgi 的上層 (我這邊是 Nginx reverse proxy) 要給 client 的資料都送出去囉,可以 ending 啦。然後 PHP 偷偷摸摸繼續在後面弄東西。
程式上寫起來會有點不一樣:

<?php

class Contrller
{
    public function handle()
    {
        $data = List::whereIn('id', [1, 4, 6])->get();
        view($data);
        fastcgi_finish_request();  // 這之後不管發生什麼事,client 都不會再收到訊息

        Background::run()
}

不過要注意,因為不管如何,client 都不再收到訊息,因此若有錯誤發生是很難 debug 的。
用 catch 也好,用 logger 也好,甚至你要請到 register_shutdown_function() 出場也都好,如果不這樣做,基本上沒什麼 debug 手段。

而我使用 fastcgi_finish_request() 也只有在 Nginx + php-fpm 時成功,我不曉得會做其他形式的 web server 架構是否可以使用。如果網友嘗試過,不如回覆讓其他人知道一下。

總之不得已才使用這個方法。

Tags:hack, Nginx, PHP

省水大作戰

Posted on 2021 年 3 月 23 日2021 年 3 月 23 日 By 日落 在〈省水大作戰〉中尚無留言
from 台灣水庫即時水情

南臺灣因去年幾乎沒有降雨,水庫的水量告急,請一起節約用水度過難關。

檢查漏水

  • 水龍頭關緊後是否會滴水?
  • 馬桶不使用時,馬桶內是否有持續滴水?
  • 天花板是否有溼痕?還是已經在下雨了?
  • 家中不用水時,水表是否仍在跳表?

減少用水

  • 洗手後記得把水龍頭關緊
  • 如廁後,可使用洗手水沖馬桶
  • 改用淋浴的方式洗澡
  • 改用水桶裝水洗車;或暫時僅用撢子去除灰塵
  • 洗米、洗菜水不要倒掉,留下來用在其他清潔用途,如沖馬桶
  • 不要再把丟水球當活動

以下是政府整理出來的一些方法,有興趣可以看看:

  • 水利署中文版全球資訊網-省水懶人包
  • 自來水全球資訊網 抗旱專區 節水方法報你知
  • 省水大絕招 – 高雄抗旱專區
  • 抗旱省水 防疫洗手不能省

缺水時還玩水,小心高壓水車就在你身邊 …

Tags:分享, 生活

太陽花學運的紀錄片在 Netflix 上架囉

Posted on 2021 年 3 月 22 日 By 日落 在〈太陽花學運的紀錄片在 Netflix 上架囉〉中尚無留言
我們的青春,在台灣
我們的青春,在台灣

個人喜歡 Netflix 的紀錄片,特別是生態相關紀錄片。前陣子整理片單無意間發現 Netflix 有太陽花學運當時拍攝的紀錄片!

我尚未看完影片,內容主要提到學生運動從很早期就開始了,從小議題、地方議題等,尋找活動成員並討論應該如何表達訴求開始,最終促成了太陽花學運 ….

歷史應該要從多個角度切入,才能看的更敲處。這部記錄片應能讓大家更了解當時的背景以及因果關係。

Tags:Netflix, 分享

鮭魚改名事件

Posted on 2021 年 3 月 21 日2021 年 3 月 21 日 By 日落 在〈鮭魚改名事件〉中尚無留言

這次因為商業活動而改名「鮭魚」的人不少,一是浪費社會資源,更改姓名後也必須修改健保、公司、銀行等相關證件的姓名;二是活動結束以後,這群人又要把名字改回去 (雖然有些人沒機會再修改了 XD)。

就此事件讓政府思考是否要設置「改名冷靜期」,讓人真正思考過後再決定是否要更改姓名。

PTT 網友也特別表示改名需要注意:

已經有兒女的人千萬不要這樣
這樣神主牌上 會寫上 顯考 鮭魚

以後子孫每次拜拜上香完 都會想說
好想吃鹹烤鮭魚啊…

Tags:XD, 新聞

部落格 15 歲

Posted on 2021 年 3 月 19 日2021 年 3 月 20 日 By 日落 在〈部落格 15 歲〉中尚無留言

不知不覺 15 年就過去了。
從一開始架站玩 Google Bomb 到開始工作後記錄垃圾話,也累計了 1000 多篇幹話。

有趣的是部落格幹話越多 PV 越高,開始記錄正經事情以後,流量就慢慢下降。目前部落格流量主要為搜尋引擎的 bot,以及各種在打密碼的殭屍主機。

最久的一篇文章為「Debian 安裝手冊」,有趣的是我後來沒在使用 Debian。
最 XD 的文章似乎是比較新的這篇「好兇的印表機」 … XD

Tags:生活雜記

文章分頁

上一頁 1 ... 63 64 65 ... 318 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.