$mtime) { $mtime = $time; } $count++; } } foreach ($files as $file) { if (!is_file($file)) { continue; } $time = @filemtime($file); if ($time > $mtime) { $mtime = $time; } $count++; } // 最新修改时间 + 文件数量作为种子,crc32 转成纯数字(URL 安全,且兼容版本号 +1 逻辑) $fingerprint = sprintf('%u', crc32($mtime . '-' . $count)); return $fingerprint; } /** * 递归列举目录下的所有文件 * @param string $dir * @return array */ protected static function files($dir) { $result = []; if (!is_dir($dir)) { return $result; } $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS) ); foreach ($iterator as $file) { if ($file->isFile()) { $result[] = $file->getPathname(); } } return $result; } }