= time() - $ttl && @filesize($cacheFile) > 1000) { if (xxiaw_list_cache_serve($cacheFile, 'HIT')) { exit; } } $lock = @fopen($cacheFile . '.lock', 'c'); if ($lock === false) { return false; } if (!@flock($lock, LOCK_EX | LOCK_NB)) { if ($modified !== false && $modified >= time() - $staleTtl && @filesize($cacheFile) > 1000) { @fclose($lock); if (xxiaw_list_cache_serve($cacheFile, 'STALE')) { exit; } } $deadline = microtime(true) + 0.20; do { usleep(20000); clearstatcache(true, $cacheFile); if (@filemtime($cacheFile) >= time() - $ttl && @filesize($cacheFile) > 1000) { @fclose($lock); if (xxiaw_list_cache_serve($cacheFile, 'HIT')) { exit; } } } while (microtime(true) < $deadline); @fclose($lock); return false; } header('X-Xxiaw-List-Cache: MISS'); ob_start(function ($html) use ($cacheDir, $cacheFile, $lock) { $status = http_response_code(); if (($status === false || $status < 400) && strlen($html) > 1000 && strpos($html, 'class="jshwarticle"') !== false) { $temporary = @tempnam($cacheDir, '.list-cache-'); if ($temporary !== false) { if (@file_put_contents($temporary, $html, LOCK_EX) !== false) { @chmod($temporary, 0640); @rename($temporary, $cacheFile); } if (is_file($temporary)) { @unlink($temporary); } } } @flock($lock, LOCK_UN); @fclose($lock); return $html; }); return true; }