PHP

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP?

情境…
docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到 docker 下運作,所以本機與 docker 間的 PHP 版本不同是極有可能發生的。

然而因為本機與實際運作環境的 PHP 版本不同,造成編輯器提示錯誤…

在編輯器 (vscode) 階段就先提示錯誤

所以上述問題應該怎麼解決呢?
當然放著不管也是一種方式,不過 VSCode 的 lint 可能就會一直叫或是看了不舒服… 🙈


本機使用、執行 Docker 內 PHP

(docker image 的建立細節可以參考 cscolabear/docker-dev: https://github.com/cscolabear/docker-dev/blob/master/phpWrapper)

1. 首先要確認有一個可以正常運作的 PHP docker image

2. 建立 phpWrapper (空白檔)
phpWrapper 可以放在任何你喜歡的位置
內容為…

#!/bin/bash

docker run --rm -i \
    -v ~/Projects:/var/www \
    cscolabear/7.2-fpm php "$@"

替換上述值,對應你自己的系統:

  • /Projects: 本機的專案目錄
  • /var/www: 容器內的專案目錄
  • cscolabear/7.2-fpm: 你的 php docker image 名稱

接著將 phpWrapper 設定為可執行

chmod +x phpWrapper

試著在同一目錄下執行~

# 取得 docker 容器內的 php 版號
./phpWrapper -v

3. 接著讓全系統都能使用這個方法~

# 切換目錄至 
cd /usr/local/bin/

# 查看目前的 php 使用路徑
ll | grep php

# 若己存在,可以先備份或是刪除

# 新設定 php 並指向 phpWrapper 所在目錄
ln -s ~/phpWrapper php

# 查看是否連結成功
php -v

之後在另何情況下 php 都會使用 docker 容器內的版本
如果 docker 容器未啟用,系統將自動使用原生~

當然~ 這裡的 php 也可以是 nodejs 或其它有的沒有 😎

可樂

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago

如何 Debug Node APP 配合 Docker 與 VsCode

透過 vscode Debug 利用中斷點 (breakpoints) 讓開發、偵錯更聰明。 加快除錯速度,而不是用傳統的 console log 方式查看變數、物件內容找問題。 本篇教你如何用 vscode + node +…

4 years ago