현재 위치: > 최신 기사 목록> md5_file () 및 데이터베이스를 사용하여 파일 서명 테이블을 관리합니다

md5_file () 및 데이터베이스를 사용하여 파일 서명 테이블을 관리합니다

M66 2025-06-05

파일 관리, 버전 제어 또는 파일 무결성 검증과 관련된 시스템을 개발할 때 효율적인 파일 서명 테이블을 구축하는 것이 중요합니다. PHP는 파일의 MD5 해시 값을 계산하기 위해 내장 함수 MD5_File ()을 제공합니다. 데이터베이스를 결합하여 유연하고 효율적인 파일 서명 시스템을 구현할 수 있습니다. 이 기사는이 목표를 단계별로 달성하도록합니다.

1. 왜 md5_file ()을 선택하십시오.

MD5_FILE ()은 파일 콘텐츠의 MD5 값을 계산하기 위해 PHP가 제공하는 편리한 기능입니다. md5 () 와 달리 File_get_Contents () 로 전체 파일을 읽을 필요는 없지만 파일 경로를 통해 서명을 직접 계산할 필요는 없습니다.이 파일을 처리 할 때 더 효율적입니다.

예제 사용 :

 $hash = md5_file('/path/to/file.zip');
echo $hash;

2. 데이터베이스 구조 설계

파일 서명을 관리하려면 다음 정보를 데이터베이스에 기록해야합니다.

  • 파일 경로 또는 고유 식별자

  • 파일의 MD5 값

  • 업데이트 타임 스탬프

간단한 MySQL 테이블 구조는 다음과 같습니다.

 CREATE TABLE file_hashes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    file_path VARCHAR(255) NOT NULL UNIQUE,
    md5_hash CHAR(32) NOT NULL,
    updated_at DATETIME NOT NULL
);

3. 파일 서명 업데이트 및 확인 로직을 구현하십시오

파일 디렉토리를 정기적으로 스캔하고 현재 파일의 MD5 값을 데이터베이스에 저장된 값과 비교하고 파일이 변경되었는지 여부를 결정할 수 있습니다.

 function updateFileHash($filePath, $pdo) {
    if (!file_exists($filePath)) {
        return false;
    }

    $md5 = md5_file($filePath);
    $now = date('Y-m-d H:i:s');

    $stmt = $pdo->prepare("SELECT md5_hash FROM file_hashes WHERE file_path = :file_path");
    $stmt->execute(['file_path' => $filePath]);
    $existing = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($existing) {
        if ($existing['md5_hash'] !== $md5) {
            // 파일 콘텐츠가 변경되었습니다,레코드 업데이트
            $updateStmt = $pdo->prepare("
                UPDATE file_hashes 
                SET md5_hash = :md5_hash, updated_at = :updated_at 
                WHERE file_path = :file_path
            ");
            $updateStmt->execute([
                'md5_hash' => $md5,
                'updated_at' => $now,
                'file_path' => $filePath
            ]);
        }
    } else {
        // 새 파일,레코드 삽입
        $insertStmt = $pdo->prepare("
            INSERT INTO file_hashes (file_path, md5_hash, updated_at) 
            VALUES (:file_path, :md5_hash, :updated_at)
        ");
        $insertStmt->execute([
            'file_path' => $filePath,
            'md5_hash' => $md5,
            'updated_at' => $now
        ]);
    }

    return true;
}

4. 디렉토리의 배치 스캔 및 서명 테이블 업데이트

파일 시스템을 가로 지르고 디렉토리에서 파일의 배치 서명 관리를 수행 할 수 있습니다.

 function scanDirectoryAndUpdate($directory, $pdo) {
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory)
    );

    foreach ($files as $file) {
        if ($file->isFile()) {
            updateFileHash($file->getPathname(), $pdo);
        }
    }
}

V. 일반적인 응용 프로그램 시나리오

이 메커니즘은 다음과 같이 널리 사용될 수 있습니다.

  • 파일 버전 추적 시스템

  • CDN 또는 캐시 실패 판단

  • 변조 방지 모니터링 시스템

  • 간단한 배포 시스템의 파일 동기화 감지

예를 들어, 배포 시스템은 파일을 업로드하기 전에 MD5 값을 계산하고 서버 측 데이터베이스의 레코드와 비교할 수 있습니다. 일관된 경우 업로드 할 필요가 없으므로 배포 효율성이 향상됩니다.

웹 패널을 구축하여 파일 서명 변경 기록을 볼 수도 있습니다.