현재 위치: > 최신 기사 목록> MD5_FILE ()을 사용하여 로컬 파일 서명 데이터베이스를 생성하십시오

MD5_FILE ()을 사용하여 로컬 파일 서명 데이터베이스를 생성하십시오

M66 2025-05-31

소프트웨어 배포 패키지, 문서, 미디어 리소스 등 다양한 로컬 파일을 관리 할 때 파일 무결성을 보장하는 것이 매우 중요한 단계입니다. 효과적인 방법은 각 파일에 대한 MD5 서명을 생성하고 후속 체크섬 변경 감지를 위해 데이터베이스에 저장하는 것입니다. PHP는 매우 편리한 기능 인 MD5_File () 을 제공하며 파일의 MD5 체크섬을 직접 반환 할 수 있습니다.

이 기사는 MD5_File ()을 사용하여 로컬 파일의 서명을 생성하고 전체 파일 확인 데이터베이스를 작성하는 방법을 소개합니다.

1. 준비

시작하기 전에 서버 또는 개발 환경에 PHP가 설치되어 있고 파일 시스템 액세스 권한이 있는지 확인하십시오. 간단한 PHP 스크립트를 예제로 사용하여 디렉토리의 모든 파일을 재귀 적으로 스캔하고 MD5 서명을 생성 한 후 데이터베이스에 저장합니다.

2. 샘플 코드

다음은 PDO를 사용하여 SQLITE 데이터베이스에 쓰는 완전한 샘플 스크립트입니다. 필요에 따라 MySQL, PostgreSQL 및 기타 데이터베이스로 교체 할 수도 있습니다.

 <?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';

$pdo = new PDO('sqlite:' . $dbFile);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// 데이터베이스를 초기화하십시오
$pdo->exec("CREATE TABLE IF NOT EXISTS file_checksums (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    path TEXT UNIQUE,
    md5 TEXT,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)");

// 디렉토리를 스캔하고 파일을 처리하십시오
function scanFiles($dir, $pdo) {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ($files as $file) {
        if ($file->isFile()) {
            $path = $file->getRealPath();
            $md5 = md5_file($path);

            $stmt = $pdo->prepare("INSERT INTO file_checksums (path, md5)
                VALUES (:path, :md5)
                ON CONFLICT(path) DO UPDATE SET md5 = :md5, updated_at = CURRENT_TIMESTAMP");
            $stmt->execute([
                ':path' => $path,
                ':md5' => $md5,
            ]);
            echo "가공:$path\n";
        }
    }
}

scanFiles($directory, $pdo);
echo "파일 서명 생성이 완료되었습니다。\n";

3. 파일 무결성을 확인하십시오

그런 다음 스크립트를 다시 실행할 수 있으며 데이터베이스에 이미 존재하는 파일 레코드를 자동으로 업데이트합니다. 또한 현재 파일의 MD5가 데이터베이스에 기록 된 MD5 값과 일치하는지 여부를 비교하기 위해 독립적 인 검증 스크립트를 만들 수도 있습니다.

 <?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';

$pdo = new PDO('sqlite:' . $dbFile);

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
    if ($file->isFile()) {
        $path = $file->getRealPath();
        $currentMd5 = md5_file($path);

        $stmt = $pdo->prepare("SELECT md5 FROM file_checksums WHERE path = :path");
        $stmt->execute([':path' => $path]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($row) {
            if ($row['md5'] !== $currentMd5) {
                echo "파일이 수정되었습니다:$path\n";
            }
        } else {
            echo "새 파일:$path\n";
        }
    }
}

4. 실제 제안

  1. 권한 제어 : 파일 및 데이터베이스의 읽기 및 쓰기 권한이 올바르게 구성되어 있는지 확인하십시오.

  2. 주기적 실행 : 서명 업데이트 또는 검증 스크립트는 CRON 타이밍 작업을 통해 정기적으로 실행할 수 있습니다.

  3. 원격 확인 : 파일 무결성을 원격으로 확인 해야하는 경우 인터페이스를 통해 생성 된 서명을 서버에 업로드 할 수 있습니다 (예 : <code> https://m66.net/api/upload_md5 </code>).

V. 결론

md5_file () 과 데이터베이스 스토리지를 결합하면 효율적이고 안정적인 파일 무결성 검증 메커니즘을 쉽게 구축 할 수 있습니다. 이 방법은 로컬 파일 모니터링, 시스템 보안 감사, 배포 자동화 및 기타 시나리오에 적합하여 시스템의 안정성 및 추적 성을 효과적으로 향상시킵니다.