$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); } /** * 比较两个文件是否相同. * * @param string $a * @param string $b * @return bool 如果一致返回true,否则返回false */ public static function compareFiles($a, $b):bool { if (!file_exists($a) || !file_exists($b)) { return false; } $result = true; // Check if filesize is different if (filesize($a) !== filesize($b)) { $result = false; } if ($result) { // Check if content is different $ah = fopen($a, 'rb'); $bh = fopen($b, 'rb'); while (!feof($ah)) { if (fread($ah, 8192) != fread($bh, 8192)) { $result = false; break; } } fclose($ah); fclose($bh); } if (!$result) { // 如果前面的方法认为文件变化,那么以文本变化的方式识别是否变化,并给出变化的内容 $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)) { $a_content = file_get_contents($a); $b_content = file_get_contents($b); $a_content_length = strlen($a_content); $b_content_length = strlen($b_content); if ($a_content_length !== $b_content_length) { $result = false; } else { for ($i = 0; $i < $a_content_length; $i++) { if ($a_content[$i] !== $b_content[$i]) { $result = false; break; } } } } } return $result; } }