首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 縮圖神器 timthumb.php 使用詳解:動態生成、快取機制與效能權衡

     編輯:PHP 相關知識

timthumb.php:零程式碼實現動態縮圖,但生產環境請三思

timthumb.php 是一支單檔 PHP 腳本,透過 URL 參數指定寬高、裁切模式,即時生成縮圖並快取至 cache/ 目錄。無需預先批次處理、無需修改上傳邏輯,極適合快速原型、舊專案改造、CMS 欄位圖片多規格輸出。但每次請求皆啟動 PHP 解析、快取目錄 I/O 檢查,高流量下效能瓶頸明顯。本文詳細說明安裝、參數、快取策略、安全加固與替代方案。

快速開始

  1. 下載:https://timthumb.googlecode.com/svn/trunk/timthumb.php(或 GitHub 鏡像)
  2. 放置於網站公開目錄(如 /public/timthumb.php)
  3. 3. 同層建立 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
qJPEG 品質 0-100q=85
a裁切錨點:t/b/l/r/tl/tr/bl/br/cca=cc (置中)
f輸出格式:jpg/png/giff=png

快取機制與失效

  • 首次請求:下載源圖 → GD 處理 → 存 cache/[hash]_[w]x[h]x[zc]q[q].[ext] → 輸出
  • 後續請求:直接讀取快取檔(filemtime 驗證源圖是否更新)
  • 手動清理:刪除 cache/ 內檔案,或在 URL 加 &cache=0 強制重生(需 timthumb 版本支援)

安全加固(必做)

  1. 限制允許域名: 編輯 $allowedSites 陣列,僅允許自有域名/CDN,防止 SSRF 攻擊內網服務。
  2. 關閉外部圖片: 若僅處理本地上傳,設 $allowedSites = [] 並確保 src 為相對路徑。
  3. 禁用 PHP 執行權限於 cache 目錄: Nginx location ~ /cache/ { deny all; } 或 .htaccess php_flag engine off。
  4. 限制最大尺寸: 設 $maxWidth、$maxHeight 防止惡意請求超大圖佔滿記憶體。

效能瓶頸與替代方案

方案延遲CPU/記憶體併發適用場景
timthumb.php (動態)高 (PHP 啟動 + GD)高低低流量、多規格不固定、快速上線
上傳時預生成 (GD/Imagick)零 (靜態檔)低 (離線)極高規格固定、高流量、CDN 友善
Nginx ngx_http_image_filter_module低 (C 模組)低高單一規格、不想動 PHP
雲端圖片服務零 (CDN)零極高企業級、多規格、需水印/智能裁切

遷移建議

若專案已大量使用 timthumb,建議漸進式遷移:

    1. 新上傳圖片改為上傳時預生成常用規格(背景佇列處理) 2. 既有圖片由離線腳本批次生成 3. 前端模板改為直接引用靜態縮圖 URL 4. 確認無 timthumb 流量後下線腳本與 cache 目錄

timthumb 是「戰術級」神器,而非「戰略級」架構。善用其快速交付優勢,並在流量增長前完成遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved