markdown
### 前言
最近有一個小小的 PHP 專案,資料量不大,我想直接用 Azure 的 Web App 搭用 SQLite 可攜式資料庫做應用
開個資料庫太殺雞用牛刀,而且資料庫開下去都是要 $$ 的
在部署上去之後發現 PDOException,當然就是連不上我要用的 SQLite 資料庫啦!
那該怎麼辦呢?找方法把缺的模組補上去吧!
### 環境
Azure Web App - Windows
PHP 版本
### 解決方法
1. 先在 site 資料夾下加上 ini 及 ext 的目錄,如圖:
下載 [PHP for Windows](https://windows.php.net/download/) 對應的版本 (NTS x86 版本), 需要加的模組 *.dll 上傳至 `ext` 目錄
其實我只需要 php\_pdo\_sqlite.dll 就好,但要試就一次定位吧~
在 `ini` 目錄增加 `extensions.ini` 檔案
`extensions.ini` 內容如下
```ini
extension=d:\home\site\ext\php_pdo_sqlite.dll
extension=d:\home\site\ext\php_sqlite3.dll
```
2. 在組態設定部分,新增應用程式設定
名稱:`PHP_INI_SCAN_DIR`
值:`d:\home\site\ini`
儲存後,記得重新啟動網站以載入模組設定
在主控台上鍵入: `php -m` 列出模組,有看到 `pdo_sqlite` 及 `sqlite3` 就表示正確載入囉!
終於網站可以確定讀到資料,完成!
### References
- [在 Azure App Service 中設定 PHP](https://docs.microsoft.com/zh-tw/azure/app-service/web-sites-php-configure)
2019/06/26
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)