웹 개발에서 파일의 무결성을 확인하고 파일 변조를 방지하는 것이 매우 중요합니다. PHP는 업로드 된 파일의 보안 및 무결성을 보장하는 데 사용할 수있는 강력한 파일 조작 기능을 제공합니다. hash_update_stream 함수는 해시 값의 실시간 업데이트에 유용한 도구입니다. 전체 파일을 메모리에로드하지 않고 큰 파일 (예 : 그림)을 처리 할 때 파일의 해시 값을 단계별로 계산하는 데 적합합니다.
이 기사에서는 Hash_update_stream 함수를 사용하여 업로드 된 이미지의 실시간 해시 확인을 수행하고 파일 컨텐츠가 수정되지 않았는지 확인하는 방법을 소개합니다.
파일 업로드 프로세스 중에 파일이 변조되지 않았는지 확인하기 위해 해시 알고리즘 (예 : SHA-256 또는 MD5)을 사용하여 파일의 해시 값을 계산할 수 있습니다. 업로드 된 파일의 해시 값을 예상 해시 값과 비교하면 전송 프로세스 중에 파일이 변조되었는지 여부를 결정할 수 있습니다.
Hash_update_stream 함수는 파일을 스트리밍 할 때 해시 값을 실시간으로 업데이트 할 수있는 PHP의 고급 기능입니다. 전체 파일을 메모리에로드하는 것을 피하기 때문에 큰 파일을 처리하는 데 매우 유용합니다.
사용자가 이미지를 업로드 할 수있는 HTML 양식이 있다고 가정합니다. PHP를 사용하여 파일 업로드를 처리하고 해시를 계산합니다. 파일의 내용을 스트리밍하고 업로드 프로세스 중에 파일의 해시 값을 실시간으로 업데이트합니다.
다음은 Hash_update_stream 함수를 사용하여 업로드 된 이미지의 실시간 해시 확인을 수행하는 방법을 보여주는 간단한 PHP 코드 예제입니다.
<?php
// 업로드 디렉토리를 설정하십시오
$uploadDir = 'uploads/';
// 파일 업로드가 있는지 확인하십시오
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
$file = $_FILES['image'];
// 업로드 된 파일이 이미지인지 확인하십시오
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (in_array($file['type'], $allowedMimeTypes)) {
// 파일에 대한 임시 경로를 가져옵니다
$tempFile = $file['tmp_name'];
// 파일 스트림을 엽니 다
$fileHandle = fopen($tempFile, 'rb');
// 해싱 알고리즘을 선택하십시오
$hashContext = hash_init('sha256');
// 사용hash_update_stream스트림 해시 파일로 업데이트
while ($chunk = fread($fileHandle, 8192)) {
hash_update_stream($hashContext, $chunk);
}
// 최종 해시 값을 얻으십시오
$fileHash = hash_final($hashContext);
// 업로드 된 파일의 해시 값을 인쇄하십시오
echo "Uploaded file hash: " . $fileHash . "<br>";
// 파일 스트림을 닫습니다
fclose($fileHandle);
// 파일을 대상 디렉토리에 저장하십시오
move_uploaded_file($tempFile, $uploadDir . $file['name']);
// 파일의 해시 값을 사전 계산한다고 가정 해 봅시다
$expectedHash = '사전 계산 된 해시 값';
// 해시 값을 비교하십시오
if ($fileHash === $expectedHash) {
echo "파일 해시 확인을 성공적으로 확인하십시오!";
} else {
echo "파일 해시 확인에 실패했습니다!";
}
} else {
echo "이미지 파일 업로드 만 지원됩니다!";
}
}
?>
<!-- 양식을 업로드하십시오 -->
<form method="POST" enctype="multipart/form-data">
<label for="image">사진 업로드:</label>
<input type="file" name="image" id="image">
<button type="submit">업로드</button>
</form>
파일 업로드 양식 : 먼저 사용자가 이미지 파일을 업로드 할 수있는 HTML 양식을 만들었습니다.
업로드 된 파일 유형 확인 : 파일을 처리 할 때 먼저 업로드 된 파일 유형이 허용 된 이미지 형식 (예 : jpeg, png, gif)인지 확인하십시오.
파일 흐름 열기 : Fopen 함수를 통해 이진 모드로 파일을 업로드하는 임시 파일을 엽니 다.
해시 알고리즘 초기화 : Hash_init 함수를 사용하여 해시 알고리즘 (예 : SHA-256)을 선택하십시오.
실시간 업데이트 해시 값 : hash_update_stream 함수를 통해 블록으로 파일 내용을 읽고 해시 값을 실시간으로 업데이트하십시오. Fread 함수는 파일의 데이터의 일부를 읽고 매번 8KB의 내용을 읽습니다.
해시 값 계산 : 모든 파일 내용을 읽은 후 Hash_Final 함수를 사용하여 최종 해시 값을 얻으십시오.
파일 저장 : 해시 확인이 전달되면 파일을 지정된 업로드 디렉토리로 이동하십시오.
해시 확인 : 계산 된 해시 값을 예상 해시 값과 비교하여 파일이 변조되었는지 여부를 확인합니다.
Hash_update_stream 함수는 큰 파일을 처리 할 때 메모리 오버플로 문제를 피할 수 있습니다. 파일을 스트림으로 읽고 한 번에 작은 데이터 조각을 읽고 (이 경우 8kb) 각 데이터에 대한 해시 값을 업데이트합니다. 스트리밍은 전체 파일을 메모리에로드하여 해시 값을 계산하는 방법에 비해 메모리 사용, 특히 큰 파일의 경우 메모리 사용량을 크게 줄일 수 있습니다.
파일 해시 확인에 Hash_update_stream 함수를 사용하는 것은 특히 큰 파일을 처리 할 때 효율적이고 안전한 방법입니다. 파일의 해시 값을 실시간으로 계산함으로써 파일 업로드 프로세스 중에 파일 컨텐츠의 무결성과 보안을 보장하고 파일이 조작되지 않도록 할 수 있습니다.