파일 관리, 버전 제어 또는 파일 무결성 검증과 관련된 시스템을 개발할 때 효율적인 파일 서명 테이블을 구축하는 것이 중요합니다. PHP는 파일의 MD5 해시 값을 계산하기 위해 내장 함수 MD5_File ()을 제공합니다. 데이터베이스를 결합하여 유연하고 효율적인 파일 서명 시스템을 구현할 수 있습니다. 이 기사는이 목표를 단계별로 달성하도록합니다.
MD5_FILE ()은 파일 콘텐츠의 MD5 값을 계산하기 위해 PHP가 제공하는 편리한 기능입니다. md5 () 와 달리 File_get_Contents () 로 전체 파일을 읽을 필요는 없지만 파일 경로를 통해 서명을 직접 계산할 필요는 없습니다.이 파일을 처리 할 때 더 효율적입니다.
예제 사용 :
$hash = md5_file('/path/to/file.zip');
echo $hash;
파일 서명을 관리하려면 다음 정보를 데이터베이스에 기록해야합니다.
파일 경로 또는 고유 식별자
파일의 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
);
파일 디렉토리를 정기적으로 스캔하고 현재 파일의 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;
}
파일 시스템을 가로 지르고 디렉토리에서 파일의 배치 서명 관리를 수행 할 수 있습니다.
function scanDirectoryAndUpdate($directory, $pdo) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory)
);
foreach ($files as $file) {
if ($file->isFile()) {
updateFileHash($file->getPathname(), $pdo);
}
}
}
이 메커니즘은 다음과 같이 널리 사용될 수 있습니다.
파일 버전 추적 시스템
CDN 또는 캐시 실패 판단
변조 방지 모니터링 시스템
간단한 배포 시스템의 파일 동기화 감지
예를 들어, 배포 시스템은 파일을 업로드하기 전에 MD5 값을 계산하고 서버 측 데이터베이스의 레코드와 비교할 수 있습니다. 일관된 경우 업로드 할 필요가 없으므로 배포 효율성이 향상됩니다.
웹 패널을 구축하여 파일 서명 변경 기록을 볼 수도 있습니다.