[i18n] 淺談Internationalization – Language Identifiers (RFC 3066)

Intro 常見的國家語系代碼如en-US, zh-TW,是遵照RFC 3066定義。 RFC 3066 簡而言之,使用ISO 639搭配ISO 3166組合而成: [ISO 639-2]-[ISO 3166-1] 產生如en-US, zh-TW codes。 代碼查詢表 – Code Tables ISO 639-2 – 語系表 ISO 3166-1 – 國別表 ISO 15924 – 地區書寫表 RFC 3066 – 完整語系國別表(含ISO 15924定義) Reference IETF語言標籤 – IETF […]

[Yii2] i18n(Internationalization) – 語系架構設定範例 (使用Key對應架構)

Intro 官網文件:Internationalization 語系代碼:[i18n] 淺談Internationalization – Language Identifiers (RFC 3066) 架構範例 別於官網以主要語系(英文)為sourceLanguage,本章範例以Key的架構去定義語系(也就是Message是指定一個Key必經轉譯)。 Configuration return [ // set target language to be English ‘language’ => ‘en-US’, // set source language to be a customized key which means it will always translate. ‘sourceLanguage’ […]

[MySQL] MySQL效能測試指南(連線|運行) – MySQL Benchmark

Intro MySQL Benchmark方法指南。 效能測試 取得PROFILE資料檢測Query: SET profiling=1;<query>;SHOW PROFILE; 從mysqlDB測測CPU: SELECT DISTINCT Transition_type_id FROM `time_zone_transition`; 連線測試 MySQL目前有個有趣的連線Latency問題,可參考:[MySQL] 如何佈署Database最佳連線路由 – phpMyAdmin建議走本機或內網 這邊提供測試方法(透過mysql client): 預裝好的選mysqldatabase來測試: use mysql; 找最大的time_zone_transition來測: SELECT * FROM `time_zone_transition`; 結果範例最後的資訊帶有總體來回時間: 120208 rows in set (0.08 sec) 交叉測試便可知越遠的client connection時間越久。

[PHP] Codeigniter 3 底層解析

Intro CodeIgniter User Guide bcit-ci/CodeIgniter Router Core: system/core/Router.php 由Codeigniter core class執行裝載為$RTR。 Uri中,Query String(Uri)的載入是在__construct()執行_set_routing()後,分別設定完成以下Properties: class – Controller name method – Action name directory – Controller directory if exist _set_routing() => _parse_routes() > _set_request() or _set_default_controller() 所以Router需裝載Uri並透過Uri取得segments注入設定。 Uri Core: system/core/Uri.php __construct()即會解析Uri(uri_string)至segments:_set_uri_string() Uri拿取方法uri_protocol預設就是使用:_parse_request_uri() […]

[Windows] 環境變數設定(Environment Variables) – 如php, mysql, cygwin cmd.

Intro 一般應用在使用如Xampp的php想要有alias指令,或像Cygwin執行檔環境變數問題。 Windows10環境變數設定選單: “My Computer” -> Properties -> Advanced -> Environment Variables 或 “Control Panel\System and Security\System” -> Advanced system settings -> Advanced -> Environment Variables 效益上就是要達到SET PATH=%PATH%;C:\your,差異在設定方式會是永久保存。 環境變數設定 可以先看到分User variables與System variables,一般我們只需要異動使用者的。 變數Path Path變數提供類似Command Alias功能, 實作上例如安裝Xampp後期待可以透過cmd輸入php,mysql等alias執行相依程式。 以PHP安裝在D:\xampp\php\目錄舉例,在環境變數設定介面選擇Path的變數進行編輯,可以新增一行: D:\xampp\php 儲存後,可以在cmd下測試輸入php -v是否有成功。

[Apache] CPanel & .htaccess & php.ini 應用指南

Intro CPanel的網頁伺服器是使用Apache搭建,可以支援.htaccess & php.ini的應用。 .htaccess 為Apache開啟AllowOverride後支援的檔案目錄設定檔功能,每個目錄皆能Override 以常見的轉導應用為例,.htaccess可參考以下: RewriteEngine On # 301 Redirect (Comment out) # redirect 301 / https://www.google.com # non-www redirect to www RewriteCond %{HTTP_HOST} ^yourname.com [NC] RewriteRule ^(.*)$ https://www.yourname.com/$1 [L,R=301] [Apache][.htaccess] 停用PHP – Disable PHP .htaccess file gives […]

[PHP] PHP底層效能原理測試 – PHP Core Performance Test

Intro PHP底層效能原理測試 指標&記憶體 測試版本:PHP 5 $data2 = $data; $data3 = $data; 以第一行為例:此時的宣告記憶體配置等同於$data2 = &$data,即記憶體不會因$data2宣告而多複製產生,只有在相依變數產生異動(Assign Write)時才會有相應機制: 當$data先產生異動 異動事件如: $data[0] = ‘modified’; $value = &$data[0]; 異動前記憶體共用同一份$data內容,以下為流程: 因為$data有相依變數,PHP會將異動前$data的記憶體內容複製或保留至暫存區(Temp),自己使用新的內容進行異動。 此時記憶體有兩塊內容:新的$data與舊的$data內容 原本相依$data的變數($data2與$data3)轉擁有或轉指向這個暫存區(Temp)。 若$data2又發生異動,則會同第一步自己使用新的內容進行異動,此時$data3為擁有暫存區(Temp)因為沒有其他相依變數。 此時記憶體有三塊內容:$data,$data2,$data3內容 若$data3又發生異動,因為沒有相依變數,等於擁有內容則直接異動。 以上在記憶體形成3塊由原生$data產出的內容,最後各自獨立。 Foreach Pointer 個人不偏好在foreach內使用Pointer,本身Loop內也沒有必要使用Pointer優化。 弊端方面就是foreach的特性,還會產生母變數記憶體複製的問題。 弊端特性之一:PHP Pass by reference in […]

[SMTP] DNS 設定 SPF 記錄(TXT) 設定範例指南

Intro DNS SPF紀錄用來反查認證寄送IP。 Sender Policy Framework – SPF Record Syntax 規則 使用DNS的TXT紀錄標記: “v=spf1 +a +mx +ip4:139.162.80.137 -all” 其中的 v=spf1 是表示 spf 所使用的版本 符號: +:Pass 代表允許,為預設的屬性 -:Fail 代表拒絕 include:表示授權給該郵件伺服器 a:表示比對 DNS 紀錄中的"A"紀錄,允許在"A"紀錄裡面的 IP 為發送郵件來源 IP mx:表示比對 DNS 紀錄中的"MX"紀錄,允許在"MX"紀錄裡面的網域為發送郵件來源網域 ptr:表示比對 DNS 紀錄中的"PTR",允許在"PTR"紀錄裡面的網域為發送郵件來源網域。 […]

[Yii2] Widget 建構與目錄架構 – Widget Pattern

Intro Yii2 Application Structure: Widgets Directory Structure 通用(共用)Widget架構 your_app (e.g. frontend)/ – widgets/ – assets/ – js/ – hedaer.js – css/ – header.css – views/ – hedaer.php – HeaderWidget.php – HeaderWidgetAsset.php 通用架構上,assets即可以考慮另外移至web外層以省搬移成本。 獨立Widget架構 your_app (e.g. frontend)/ – widgets/ – header/ […]