timthumb.php 是一支單檔 PHP 腳本,透過 URL 參數指定寬高、裁切模式,即時生成縮圖並快取至 cache/ 目錄。無需預先批次處理、無需修改上傳邏輯,極適合快速原型、舊專案改造、CMS 欄位圖片多規格輸出。但每次請求皆啟動 PHP 解析、快取目錄 I/O 檢查,高流量下效能瓶頸明顯。本文詳細說明安裝、參數、快取策略、安全加固與替代方案。
https://timthumb.googlecode.com/svn/trunk/timthumb.php(或 GitHub 鏡像)/public/timthumb.php)cache/ 目錄,權限 755(Linux)或 Everyone 寫入(Windows)
4. HTML 引用:<img src="/timthumb.php?src=/uploads/photo.jpg&w=300&h=200&zc=1">
| 參數 | 說明 | 範例 |
|---|---|---|
src | 源圖片 URL(相對或絕對) | src=/uploads/a.jpg |
w | 目標寬度 (px) | w=300 |
h | 目標高度 (px) | h=200 |
zc | 縮放模式:1=裁切填滿、2=按比例縮放、3=固定寬高不裁切 | zc=1 |
q | JPEG 品質 0-100 | q=85 |
a | 裁切錨點:t/b/l/r/tl/tr/bl/br/cc | a=cc (置中) |
f | 輸出格式:jpg/png/gif | f=png |
cache/[hash]_[w]x[h]x[zc]q[q].[ext] → 輸出filemtime 驗證源圖是否更新)cache/ 內檔案,或在 URL 加 &cache=0 強制重生(需 timthumb 版本支援)$allowedSites 陣列,僅允許自有域名/CDN,防止 SSRF 攻擊內網服務。$allowedSites = [] 並確保 src 為相對路徑。location ~ /cache/ { deny all; } 或 .htaccess php_flag engine off。$maxWidth、$maxHeight 防止惡意請求超大圖佔滿記憶體。| 方案 | 延遲 | CPU/記憶體 | 併發 | 適用場景 |
|---|---|---|---|---|
| timthumb.php (動態) | 高 (PHP 啟動 + GD) | 高 | 低 | 低流量、多規格不固定、快速上線 |
| 上傳時預生成 (GD/Imagick) | 零 (靜態檔) | 低 (離線) | 極高 | 規格固定、高流量、CDN 友善 |
| Nginx ngx_http_image_filter_module | 低 (C 模組) | 低 | 高 | 單一規格、不想動 PHP |
| 雲端圖片服務 | 零 (CDN) | 零 | 極高 | 企業級、多規格、需水印/智能裁切 |
若專案已大量使用 timthumb,建議漸進式遷移:
timthumb 是「戰術級」神器,而非「戰略級」架構。善用其快速交付優勢,並在流量增長前完成遷移。