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

PHP 基於 Apache Rewrite 的動態縮略圖自動生成機制實現

     編輯:PHP 綜合知識

「按需生成、緩存複用」是高性能圖片服務的核心模式。本文詳解利用 Apache mod_rewrite 攔截不存在的縮略圖請求,動態調用 PHP 生成並緩存,後續請求直接由 Web Server 靜態響應的完整實現方案。

架構設計

原圖路徑:  /upload/news/2013/07/21/1.jpg
縮略圖路徑: /supload/news/2013/07/21/1.jpg

目錄結構:

www/
├── PicThumb.class.php      # 縮略圖核心類
├── ThumbConfig.php         # 尺寸/水印配置
├── upload/                 # 原圖存儲
│   └── news/2013/07/21/1.jpg
├── supload/                # 縮略圖緩存目錄(需寫權限)
│   ├── .htaccess           # Rewrite 規則
│   ├── watermark.png       # 水印素材
│   └── createthumb.php     # 生成入口腳本

核心組件詳解

.htaccess 重寫規則

<IfModule mod_rewrite.c>
RewriteEngine On
# 文件/鏈接/目錄存在時直接響應
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# 不存在則轉發給 PHP 生成腳本
RewriteRule ^.*$ createthumb.php?path=%{REQUEST_URI} [NC,L]
</IfModule>

關鍵邏輯:優先檢查靜態文件存在性,僅在 404 時觸發動態生成,極大降低 PHP 執行頻率。

createthumb.php 生成邏輯

<?php
define('WWW_PATH', dirname(dirname(__FILE__)));
require WWW_PATH.'/PicThumb.class.php';
require WWW_PATH.'/ThumbConfig.php';

$logfile = WWW_PATH.'/createthumb.log';
$source_path = WWW_PATH.'/upload/';
$dest_path = WWW_PATH.'/supload/';

$path = $_GET['path'] ?? '';
if (!$path) exit();

// 解析相對路徑與類型
$relative_url = str_replace($dest_path, '', WWW_PATH.$path);
$type = substr($relative_url, 0, strpos($relative_url, '/'));
$config = $thumb_config[$type] ?? null;
if (!$config || !isset($config['fromdir'])) exit();

// 構建源/目標路徑
$source = str_replace('/'.$type.'/', '/'.$config['fromdir'].'/', $source_path.$relative_url);
$dest = $dest_path.$relative_url;

// 生成並輸出
$obj = new PicThumb($logfile);
$obj->set_config($config);
if ($obj->create_thumb($source, $dest)) {
    ob_clean();
    header('Content-Type: '.mime_content_type($dest));
    exit(file_get_contents($dest));
}
?>

關鍵優勢

  • 零侵入業務代碼:模板僅引用縮略圖 URL,無需判斷是否存在
  • 高併發友好:生成後轉為靜態文件,後續請求繞過 PHP 直接由 Apache/Nginx 響應
  • 多規格靈活配置:通過 ThumbConfig.php 定義不同業務場景(news/article等)的尺寸、水印、裁剪策略
  • 故障隔離:生成失敗不影響原圖訪問,日誌記錄便於排查

部署檢查清單

  1. 啟用 Apache Rewrite:sudo a2enmod rewrite && systemctl restart apache2
  2. 確保 supload/ 目錄 Web 進程可寫
  3. 驗證 PicThumb.class.php 支持所需圖片格式(GD/Imagick)
  4. 配置 ThumbConfig.php 覆蓋所有業務類型

此模式廣泛應用於 CMS、電商商品圖、用戶頭像等高頻縮略圖場景,是「動態生成靜態化」經典架構的教科書級實現。

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