備份很重要,特別是備份以後還要確定能夠順利還原!
站在巨人的肩膀上,絕對不會錯的!
軟體開發、伺服器和生活瑣事
備份很重要,特別是備份以後還要確定能夠順利還原!
站在巨人的肩膀上,絕對不會錯的!
WordPress 預設不會顯示任何的錯誤訊息,若要開發 theme、plugin 來說實在不方便。但可以在 wp-config.php 中新增參數供開發人員使用。
<?php // .... // allow debug define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'SCRIPT_DEBUG', true ); define( 'SAVEQUERIES', true ); define( 'WP_DEBUG_DISPLAY', true);
再多一些除錯訊息:
<?php // .... ini_set( 'display_errors', 1 ); error_reporting(E_ALL);
最近拿任天堂的健身環來當作增加運動量,不過體重卻意外增加 (慘啊)。這裡整理一下前陣子和朋友討論的減重相關的運動方式。若讀者想要安排運動計畫,還是先向你的健身教練或熟悉你身體狀況的營養師諮詢。
常見的運動大致上可以分為二大類:有氧運動、無氧運動。常見的有氧運動有快走、慢跑、游泳、登山等;無氧運動則有快跑、重量訓練,還有讓你一次就趴倒在大上的七分鐘運動等。
有氧主要可增強心費功能 (代謝、體循環),無氧則是破壞肌肉並讓肌肉修復、增長。
接下來聊一下肥胖的原因。當吃下的食物熱量大於身體代謝熱量量時,醣類就會使用其他方式儲存起來,其中脂肪是單位儲存能量最高的形式,所以過多的熱量很容易就轉成脂肪囤積。其中脂肪細胞基礎代謝的熱量遠比肌肉細胞還要低,所以若能在脂肪細胞量不變的情況下,只要增加身體的肌肉細胞量,就可以提高身體的基礎代謝熱量,也能減少脂肪堆積的量。
以此為原則,我提高運動量,並以核心肌肉群的運動為主,但有個我沒有注意到的行為:增加運動量後,食慾、飢餓感也會增加。所以 ….. 我體重增加了 …. Orz
搬到 WordPress 也過了幾週,這裡整理一下我搬家、整理資料用到的 WordPress 外掛。這邊會提到的外掛包含搬移資料、快取、圖片 CDN、程式碼標記、RSS 等工具,但因我沒特別做 SEO (只要自己搜尋找得到資料就好),所以不會提及 SEO 相關外掛和工具。
這是我找到一個很好用的搬家工具,從 Blogger 轉資料、圖片到 WordPress,中間完全不需要進行設定會人工介入,工具跑完文章和圖片都已經好端端匯入 WordPress,留言、分類、標籤也一併拉回來。
我可能較心急,不然似乎還可以提供 Blogger 做 301 redirect,讓流量直接導至新網站。
Blogger Importer Extended 是付費工具,但可以一次就完整把所有資料複製回 WordPress,個人覺得這個價格比外包找人整合資料庫便宜多了,非常值得購買。
就是個 Syntax Higlighter,但不只支援多種程式語言的 highlight,也同時支援 inline highlight、新版 WordPress 的 block editor。輕輕鬆鬆就可以達到需要的效果:
一般用 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 架構是否可以使用。如果網友嘗試過,不如回覆讓其他人知道一下。
總之不得已才使用這個方法。