$value) { if (!in_array($value, ['.', '..'])) { $current_path = $dir . DS . $value; if (is_dir($current_path)) { $result[$value] = self::mapDir($current_path, $callback); } else { if (is_callable($callback)) { $result[$value] = $callback($current_path, $value, $dir); } else { $result[$value] = $current_path; } } } } return $result; } public static function formatWinPath($content) { return str_replace('/', '\\', $content); } public static function compareFiles($a, $b) { $text_mime_type = []; $text_mime_type[] = 'text/html'; $text_mime_type[] = 'text/plain'; $text_mime_type[] = 'text/css'; $text_mime_type[] = 'image/svg+xml'; $text_mime_type[] = 'text/x-php'; $text_mime_type[] = 'application/json'; $text_mime_type[] = 'application/x-wine-extension-ini'; if (in_array(mime_content_type($a), $text_mime_type) && in_array(mime_content_type($b), $text_mime_type)) { // 如果都是文本文件,则执行内容对比 $diff = new Diff(file_get_contents($a), file_get_contents($b)); $diff_content = $diff->getGroupedOpcodes(); if (!empty($diff_content)) { return false; } else { return true; } } // Check if filesize is different if (filesize($a) !== filesize($b)) { return false; } // Check if content is different $ah = fopen($a, 'rb'); $bh = fopen($b, 'rb'); $result = true; while (!feof($ah)) { if (fread($ah, 8192) != fread($bh, 8192)) { $result = false; break; } } fclose($ah); fclose($bh); return $result; } }