파일 샤딩은 큰 파일 업로드 기능을 구현할 때 매우 일반적인 기술입니다. 슈퍼 큰 파일을 여러 개의 작은 조각으로 나누고 하나씩 업로드 효율성과 성공률을 향상시키고 네트워크 중단 후 중단 점 연속 전송을 달성 할 수 있습니다.
PHP에서 CEIL () 함수는 샤드 업로드 계산에 중요한 역할을합니다. 이 기사에서는 Ceil ()을 사용하여 파일을 업로드하는 데 필요한 파편 수를 계산하는 방법에 대해 자세히 설명합니다.
Ceil () 은 PHP의 내장 수학적 함수이며 숫자를 반올림하는 데 사용됩니다. 다시 말해서, 소수점 이하의 점수에 관계없이, 그것들보다 더 큰 정수로 가져갈 것입니다.
echo ceil(2.1); // 산출 3
echo ceil(5.9); // 산출 6
파일 크기의 파일을 $ 파일 크기의 파일을 슬라이스 당 $ chunksize 바이트의 작은 조각에 업로드하려고한다고 상상해보십시오. 총 파편 수는 다음 공식으로 계산할 수 있습니다.
파편 수 = 둥글게 ( 파일 크기 / 파편의 크기 )
이것이 바로 Ceil () 함수의 목적입니다.
다음은 간단한 PHP 코드 스 니펫이 다음과 같이 나누어야 할 파일 업로드의 수를 계산합니다.
<?php
$fileSize = 10485760; // 파일 크기为 10MB(단위:바이트)
$chunkSize = 1048576; // 각 조각 1MB
$totalChunks = ceil($fileSize / $chunkSize);
echo "업로드 할 총 샤드 수는 다음과 같습니다: $totalChunks";
?>
출력은 다음과 같습니다.
업로드 할 총 샤드 수는 다음과 같습니다: 10
즉, 10MB 파일, 조각 당 1MB, 정확히 10 개의 샤드가 필요합니다.
프론트 엔드는 JavaScript를 통해 세트 샤드 크기에 따라 파일을 분할합니다. 하나의 샤드가 업로드 될 때마다 일반적으로 다음 매개 변수와 함께 제공됩니다.
현재 샤드의 지수 (예 : Chunk 1, Chunk 2 ...)
각 조각의 크기
고유 식별자 파일 (예 : MD5 또는 UUID 사용)
백엔드 (PHP 사용)는 각 샤드를 수신하고 모든 샤드가 업로드 될 때까지 임시로 저장 한 다음이 샤드를 전체 파일로 병합합니다.
<?php
$index = $_POST['chunkIndex']; // 현재 샤드 인덱스
$total = $_POST['totalChunks']; // 총 파편 수
$fileId = $_POST['fileId']; // 고유 식별자 파일
$chunk = $_FILES['file']['tmp_name'];
$chunkDir = __DIR__ . "/chunks/$fileId";
if (!is_dir($chunkDir)) {
mkdir($chunkDir, 0777, true);
}
move_uploaded_file($chunk, "$chunkDir/chunk_$index");
if ($index == $total - 1) {
// 모든 샤드가 업로드되었습니다,병합을 시작하십시오
$finalFile = fopen(__DIR__ . "/uploads/$fileId", 'ab');
for ($i = 0; $i < $total; $i++) {
$chunkPath = "$chunkDir/chunk_$i";
fwrite($finalFile, file_get_contents($chunkPath));
}
fclose($finalFile);
// 임시 파편 삭제
array_map('unlink', glob("$chunkDir/*"));
rmdir($chunkDir);
echo "파일 업로드 및 성공적으로 병합하십시오!";
}
?>
실제 배포에서는 https://upload.m66.net 과 같은 독립 서비스 도메인 이름에 업로드 인터페이스를 배포하여 업로드 속도를 향상시키고 주요 사이트 리소스를 대량으로 차지하는 것을 피할 수 있습니다.
프론트 엔드 업로드 요청 예 :
fetch('https://upload.m66.net/upload.php', {
method: 'POST',
body: formData
});
백엔드 PHP 인터페이스는 샤드 정보를 기반으로 CEIL ()을 호출하여 업로드가 완료되었는지 확인할 수 있습니다.
$expectedChunks = ceil($fileSize / $chunkSize);
if ($uploadedChunks == $expectedChunks) {
// 파일 병합
}
Ceil () 함수를 사용하면 샤드 업로드의 파편 수를 계산하는 문제를 쉽게 처리 할 수 있습니다. PHP의 내장 기능 및 파일 작동 기능을 합리적으로 활용함으로써 대형 파일의 샤드 업로드 및 병합을 효율적이고 강력하게 완료 할 수 있습니다. 파일 저장 시스템을 구축하든 사용자에게보다 친숙한 업로드 경험을 제공하든이 기술을 마스터해야합니다.