2019/06/12

[PHP] 解決連線 MySQL 錯誤訊息亂碼顯示問題

markdown ### 問題 一直以來這亂碼問題遇到的重覆不下 N 次,後來看到 `SQLSTATE[HY000] [2002]` 的錯誤代號,可以直覺反應就是連不到資料庫 Trace 出來的錯誤訊息實際是長這個樣子的,這是因為 MySQL 預設輸出錯誤訊息的是以 UTF-8 輸出,而非二進制的字符字串值從其字符集轉換為 UTF-8 就產生像以下的編碼狀況 ``` mysqli_connect(): (HY000/2002): \xb5L\xaak\xb3s\xbdu\xa1A\xa6]\xac\xb0\xa5\xd8\xbc\xd0\xb9q\xb8\xa3\xa9\xda\xb5\xb4\xb3s\xbdu\xa1C\r\n ``` 我們看顯示的樣子就像下圖,以使用者端來看就是有點不開心 ### 解決方法 用 mb\_convert\_encoding 的方式,先將取得編碼訊息轉成 utf-8 (以繁體中文的來說就是 big5) 如此就能正常顯示中文訊息啦 ### References - [iconv big5轉換utf8問題](http://sweslo17.blogspot.com/2012/04/big5-erpms-sql-local-cache-phpiconv.html) - [PHP: mb\_convert\_encoding](https://www.php.net/manual/en/function.mb-convert-encoding.php) - [MySQL: 10.6 Error Message Character Set](https://dev.mysql.com/doc/refman/5.7/en/charset-errors.html)

[PHP] 指定專案特定 PHP 版本以下載符合的 composer 套件

markdown ### 前言 一般來說,開發人員的機器總是會安裝最新版本的 PHP 來開發 但是總是會有久遠要維護的專案,而 PHP 版本可能也是久遠的舊版本 如果想透過 Composer 來管理套件,但又想要限制特定支援的安裝版本套件,那該怎麼辦呢? ### 問題 開發環境用 PHP 7.3,維護專案採用 PHP 5.6.1 在不變更開發環境的 PHP 版本之下,專案更新套件時會下載到最新的版本 ### 解決方法 在 Composer 有個方便的設定 `composer.json` 只要在 config 加上 platform 的 php 版本即可 ```json ... "config": { "platform": { "php": "5.6.1" } }, ... ``` 也可用指令方式來下命令達到一樣的效果 ``` composer config platform.php 5.6.1 ``` ### 更新 composer 修改 composer.json 後執行更新,即會做降版動作 ``` $ composer update ``` ### References - [Enforcing a PHP Version for Installed Composer Packages](https://andy-carter.com/blog/composer-php-platform)

2019/06/11

[VSCode] 用 VS Code 開啟 Laravel-Tracy 偵錯的檔案

markdown 以前寫過一篇是用 Sublime 開啟 Tracy 偵錯的檔案: [善用工具 -- Tracy 讓 PHP Debug 變簡單了](https://devmanna.blogspot.com/2015/10/tracy-tracy-php-debug.html) 現在都用 VS Code 或 PhpStorm 來寫 PHP 專案 來記錄一下怎麼使用 VS Code 來開啟 Laravel-Tracy 偵錯到的檔案 ### 環境 - Laravel-Tracy 1.8.23 - VS Code 1.35.0 ### 編輯器設定 Protocol: `vscode://file/%file:%line` [Tracy](https://tracy.nette.org/en/) 的設定如下 ```php // Visual Studio Code Tracy\Debugger::$editor = 'vscode://file/%file:%line'; ``` [Laravel-Tracy](https://github.com/recca0120/laravel-tracy) 的設定如下 (`config/tracy.php`) ### 瀏覽器 以下為各個瀏覽器用 VS Code 來開啟檔案的對話視窗 Microsoft Edge Chrome Firefox ### References - [How to open a file in editor from Tracy?](https://tracy.nette.org/en/open-files-in-ide) - [Laravel-Tracy](https://github.com/recca0120/laravel-tracy)

[Kotlin] 第一支 Hello World

markdown Kotlin 快速入門第一發: 一定要來寫一下 Hello World ### 環境 - Windows 10 - Java SDK 1.8 - Kotlin Compiler v1.3.31 ### Command Line Compiler 下載 [Command Line Compiler v1.3.31](https://github.com/JetBrains/kotlin/releases/tag/v1.3.31) 下載解壓後指定系統環境路徑至 `kotlinc/bin` 確認版本指令: ``` $ kotlinc -version ``` 輸出如下就表示可以正確執行 CLI ``` info: kotlinc-jvm 1.3.31 (JRE 1.8.0_152-b16) ``` ### 建立第一支程式 建立一個 `hello.kt` 檔案 ```java fun main(args: Array) { println("Hello, World!") } ``` 編譯檔案 ``` $ kotlinc hello.kt -include-runtime -d hello.jar ``` 執行 ``` $ java -jar hello.jar ``` 輸出結果 ``` Hello, World! ``` 很久沒寫 Java,只是最近一直聽到 Kotlin 就來玩一下~ ### References - [Working with the Command Line Compiler](https://kotlinlang.org/docs/tutorials/command-line.html)

2019/06/09

[ASP.NET MVC] 解決 DirectoryNotFoundException 找不到路徑 bin\roslyn\csc.exe 的問題

markdown ### 前言 事情發生在 clone 專案編譯執行後發生的。以前曾經也發生過,但不記錄還是會忘了解法,趁現在遇到了,快記一下! ### 問題 ASP.NET MVC 專案在 git clone 下來編譯後執行網站出現:System.IO.DirectoryNotFoundException: 找不到路徑 'bin\roslyn\csc.exe' 的一部分 ### 解決方法 開啟專案 `*.csproj` 檔,加上 Target 的 AfterTargets 設定
### 參考 - [Could not find a part of the path … bin\roslyn\csc.exe](https://stackoverflow.com/questions/32780315/could-not-find-a-part-of-the-path-bin-roslyn-csc-exe) - [找不到 roslyn\csc.exe ?!](https://blog.yowko.com/missing-roslyn-csc/) - [Web API找不到 bin 底下的 roslyn csc.exe ?](http://marcus116.blogspot.com/2018/11/net-web-api-bin-roslyn-cscexe.html)

2019/03/14

[.NET] 用 Ical.Net 建立 iCalendar ics 日曆數據交換檔案

markdown 今天在專案中要產生 *.ics 的日曆數據交換檔案提供下載 打鐵趁熱記錄一下,以免又要石沈大海 目前採用的是在 NuGet 的 [Ical.Net](https://www.nuget.org/packages/Ical.Net/) 套件, 版本 v4.1.10 建立 CalendarEvent 超簡單
*.ics 內容如下
在 Windows 10 的行事曆開啟 *.ics 的呈現內容
### 範例程式 (採用 Web API)
### 參考資料 - [WiKi - iCalendar](https://zh.wikipedia.org/wiki/ICalendar) - [NuGet - Ical.Net](https://www.nuget.org/packages/Ical.Net/) - [Ical.Net Wiki](https://github.com/rianjs/ical.net/wiki)

2019/02/22

[ASP.NET MVC] 解決 SqlException 錯誤: 此憑證鏈結是由不受信任的授權單位發出的。

markdown 在佈署網站時總會遇到一些眉眉角角的問題 今天到客戶要求的主機上佈署網站,出現:「此憑證鏈結是由不受信任的授權單位發出的。」 的錯誤訊息

**訊息:[SqlException (0x80131904): 與伺服器的連接已成功建立,但在登入程序時發生錯誤。 (provider: SSL Provider, error: 0 - 此憑證鏈結是由不受信任的授權單位發出的。)]** 看起來資料庫連線沒問題,只是在登入步驟出了差錯。SSL Provider 提供重要線索,首先檢查連線字串~ 原本測試站是用 Azure 的 Database 服務,連線字串包含 Encrypt=True;TrustServerCertificate=False;,但客戶主機不適用,拿掉就可以正常連線了! 除錯任務完成,特此記錄一下!