優點: 讀取時無需判斷,減少 CPU 運算,響應極快。
缺點: 尺寸變更或新增規則時,需批量重新生成歷史圖片,維護成本高。
優點:
缺點: 高並發下首次生成會造成資源競爭。
tmp/ 目錄創建標記文件,文件名為 md5(目標文件路徑)<?php
function generateThumb($srcPath, $dstPath, $width, $height) {
$lockFile = sys_get_temp_dir() . '/thumb_lock_' . md5($dstPath);
// 嘗試獲取鎖(非阻塞)
$fp = @fopen($lockFile, 'x');
if (!$fp) {
// 正在生成中,返回佔位圖或等待
return getPlaceholder();
}
try {
// 實際生成邏輯
$image = imagecreatefromjpeg($srcPath);
$thumb = imagescale($image, $width, $height);
imagejpeg($thumb, $dstPath);
imagedestroy($image);
imagedestroy($thumb);
} finally {
fclose($fp);
@unlink($lockFile); // 釋放鎖
}
return $dstPath;
}
?>
flock() 實現進程級阻塞等待try_files 指令,無縫轉發至 PHP 生成腳本X-Accel-Redirect 讓 Nginx 直接服務靜態文件採用「訪問時生成 + 文件鎖」方案,兼顧靈活性與高併發穩定性,是生產環境首選架構。