二維碼廣泛應用於行銷、支付、登入等場景。PHP 端生成二維碼最常用的兩種方式分別是:呼叫 Google Chart API(線上服務)與使用本地函式庫 PHP QR Code。本文詳細說明兩者的實作方式、優缺點比較與適用場景。
$urlToEncode = "https://www.example.com";
$qrUrl = "https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=" . urlencode($urlToEncode) . "&choe=UTF-8";
echo "<img src='$qrUrl' alt='QR Code'>";
chs:圖片尺寸(寬x高),如 150x150。cht=qr:指定圖表類型為 QR Code。chl:編碼內容,需 URL 編碼。choe:字元編碼,建議 UTF-8。chld:錯誤修正等級與邊距(可選),如 L|0。| 優點 | 缺點 |
|---|---|
| 零依賴、無需安裝擴展 | 依賴外部服務,離線環境不可用 |
| 生成速度快、無伺服器負擔 | Google 可能停止服務(已遷移至 Image Charts) |
| 支援 HTTPS、CDN 加速 | 資料傳輸至第三方,敏感資訊不宜使用 |
從 SourceForge 下載庫,解壓後引入 phpqrcode.php。
include "phpqrcode.php";
$value = "https://www.example.com";
$errorCorrectionLevel = "L"; // L, M, Q, H
$matrixPointSize = 4; // 單元格像素大小
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
// 直接輸出 PNG 二進位資料
QRcode::png($value, 'qrcode.png', 'L', 4, 2);
// 如需在中心嵌入 Logo,需搭配 GD/ImageMagick 後處理
| 優點 | 缺點 |
|---|---|
| 完全離線、資料不出伺服器 | 需安裝 GD 擴展(通常預設啟用) |
| 可自訂錯誤修正等級、尺寸、輸出格式 | 大量生成時消耗 CPU/記憶體 |
| 支援 PNG、JPEG 等多種格式 | 庫更新較少,PHP 8+ 相容性需自測 |
兩大方案各有千秋,視專案需求選擇。現代專案多傾向本地生成以掌控資料與可用性,PHP QR Code 雖屬老牌庫但仍穩定好用;若追求更現代化,亦可評估 bacon/bacon-qr-code (Composer 套件) 或 endroid/qr-code 等新式庫。