2019/06/26

[Azure] 如何在 Azure Web App 啟用 PHP 模組

前言

最近有一個小小的 PHP 專案,資料量不大,我想直接用 Azure 的 Web App 搭用 SQLite 可攜式資料庫做應用

開個資料庫太殺雞用牛刀,而且資料庫開下去都是要 $$ 的

在部署上去之後發現 PDOException,當然就是連不上我要用的 SQLite 資料庫啦!

那該怎麼辦呢?找方法把缺的模組補上去吧!

環境

Azure Web App - Windows

PHP 版本

解決方法

  1. 先在 site 資料夾下加上 ini 及 ext 的目錄,如圖:

下載 PHP for Windows 對應的版本 (NTS x86 版本), 需要加的模組 *.dll 上傳至 ext 目錄

其實我只需要 php_pdo_sqlite.dll 就好,但要試就一次定位吧~

ini 目錄增加 extensions.ini 檔案

extensions.ini 內容如下

extension=d:\home\site\ext\php_pdo_sqlite.dll
extension=d:\home\site\ext\php_sqlite3.dll
  1. 在組態設定部分,新增應用程式設定

名稱:PHP_INI_SCAN_DIR
 值:d:\home\site\ini

儲存後,記得重新啟動網站以載入模組設定

在主控台上鍵入: php -m 列出模組,有看到 pdo_sqlitesqlite3 就表示正確載入囉!

終於網站可以確定讀到資料,完成!

References

2019/06/12

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

問題

一直以來這亂碼問題遇到的重覆不下 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

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

前言

一般來說,開發人員的機器總是會安裝最新版本的 PHP 來開發

但是總是會有久遠要維護的專案,而 PHP 版本可能也是久遠的舊版本

如果想透過 Composer 來管理套件,但又想要限制特定支援的安裝版本套件,那該怎麼辦呢?

問題

開發環境用 PHP 7.3,維護專案採用 PHP 5.6.1

在不變更開發環境的 PHP 版本之下,專案更新套件時會下載到最新的版本

解決方法

在 Composer 有個方便的設定

composer.json

只要在 config 加上 platform 的 php 版本即可

    ...
    "config": {
        "platform": {
            "php": "5.6.1"
        }
    },
    ...

也可用指令方式來下命令達到一樣的效果

composer config platform.php 5.6.1

更新 composer

修改 composer.json 後執行更新,即會做降版動作

$ composer update

References

2019/06/11

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

以前寫過一篇是用 Sublime 開啟 Tracy 偵錯的檔案: 善用工具 -- Tracy 讓 PHP Debug 變簡單了

現在都用 VS Code 或 PhpStorm 來寫 PHP 專案

來記錄一下怎麼使用 VS Code 來開啟 Laravel-Tracy 偵錯到的檔案

環境

  • Laravel-Tracy 1.8.23
  • VS Code 1.35.0

編輯器設定

Protocol: vscode://file/%file:%line

Tracy 的設定如下

// Visual Studio Code
Tracy\Debugger::$editor = 'vscode://file/%file:%line';

Laravel-Tracy 的設定如下 (config/tracy.php)

瀏覽器

以下為各個瀏覽器用 VS Code 來開啟檔案的對話視窗

Microsoft Edge

Chrome

Firefox

References

[Kotlin] 第一支 Hello World

Kotlin 快速入門第一發: 一定要來寫一下 Hello World

環境

  • Windows 10
  • Java SDK 1.8
  • Kotlin Compiler v1.3.31

Command Line Compiler

下載 Command Line Compiler v1.3.31

下載解壓後指定系統環境路徑至 kotlinc/bin

確認版本指令:

$ kotlinc -version

輸出如下就表示可以正確執行 CLI

info: kotlinc-jvm 1.3.31 (JRE 1.8.0_152-b16)

建立第一支程式

建立一個 hello.kt 檔案

fun main(args: Array<string>) {
    println("Hello, World!")
}

編譯檔案

$ kotlinc hello.kt -include-runtime -d hello.jar

執行

$ java -jar hello.jar

輸出結果

Hello, World!

很久沒寫 Java,只是最近一直聽到 Kotlin 就來玩一下~

References

2019/06/09

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

前言

事情發生在 clone 專案編譯執行後發生的。以前曾經也發生過,但不記錄還是會忘了解法,趁現在遇到了,快記一下!

問題

ASP.NET MVC 專案在 git clone 下來編譯後執行網站出現:System.IO.DirectoryNotFoundException: 找不到路徑 'bin\roslyn\csc.exe' 的一部分

解決方法

開啟專案 *.csproj 檔,加上 Target 的 AfterTargets 設定

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
view raw Web.csproj hosted with ❤ by GitHub

參考