Le fragment de fichiers est une technique très courante lors de l'implémentation de la fonction de téléchargement de fichiers volumineux. Il peut diviser un fichier super grand en plusieurs petits fragments et télécharger un par un pour améliorer l'efficacité du téléchargement et le taux de réussite, et atteindre une transmission continue de point d'arrêt après l'interruption du réseau.
Dans PHP, la fonction ceil () joue un rôle important dans le calcul du téléchargement des fragments. Cet article expliquera en détail comment utiliser ceil () pour calculer le nombre d'éclats requis pour télécharger un fichier.
Ceil () est une fonction mathématique intégrée dans PHP, qui est utilisée pour rassembler un nombre. En d'autres termes, peu importe le nombre de points décimaux, ils le porteront au plus petit entier plus grand que lui.
echo ceil(2.1); // Sortir 3
echo ceil(5.9); // Sortir 6
Imaginez que nous voulons télécharger un fichier avec une taille d'octets de taille de fichiers en petits morceaux de $ ChunkSize par tranche. Le nombre total d'éclats peut être calculé par la formule suivante:
Nombre d'éclats = Vers le haut ( Taille de fichier / Taille des éclats )
C'est exactement le but de la fonction ceil () .
Voici un simple extrait de code PHP pour calculer le nombre de pièces de téléchargement de fichiers à diviser en:
<?php
$fileSize = 10485760; // Taille de fichier为 10MB(unité:octet)
$chunkSize = 1048576; // Chaque pièce 1MB
$totalChunks = ceil($fileSize / $chunkSize);
echo "Le nombre total d'éclats à télécharger est: $totalChunks";
?>
La sortie sera:
Le nombre total d'éclats à télécharger est: 10
Autrement dit, 10 Mo de fichiers, 1 Mo par pièce, exactement 10 éclats sont nécessaires.
Le front-end divise le fichier en fonction de la taille du rayon défini via JavaScript. Chaque fois qu'un éclat est téléchargé, il est généralement livré avec les paramètres suivants:
L'indice du fragment actuel (tel que: Chunk 1, Chunk 2 ...)
La taille de chaque pièce
Fichier identifiant unique (comme utiliser md5 ou uUID )
Le backend (en utilisant PHP) reçoit chaque fragment et le stocke temporairement jusqu'à ce que tous les éclats soient téléchargés, puis fusionne ces éclats dans un fichier complet.
<?php
$index = $_POST['chunkIndex']; // Index de fragment actuel
$total = $_POST['totalChunks']; // Nombre total d'éclats
$fileId = $_POST['fileId']; // Fichier identifiant unique
$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) {
// Tous les éclats ont été téléchargés,Commencer à fusionner
$finalFile = fopen(__DIR__ . "/uploads/$fileId", 'ab');
for ($i = 0; $i < $total; $i++) {
$chunkPath = "$chunkDir/chunk_$i";
fwrite($finalFile, file_get_contents($chunkPath));
}
fclose($finalFile);
// Supprimer les éclats temporaires
array_map('unlink', glob("$chunkDir/*"));
rmdir($chunkDir);
echo "Téléchargement de fichiers et fusionner avec succès!";
}
?>
Dans le déploiement réel, vous pouvez déployer l'interface de téléchargement sur un nom de domaine de service indépendant tel que https://upload.m66.net , améliorant ainsi la vitesse de téléchargement et évitant les principales ressources du site occupantes par une grande quantité.
Exemple de demande de téléchargement frontal:
fetch('https://upload.m66.net/upload.php', {
method: 'POST',
body: formData
});
L'interface PHP backend peut appeler ceil () sur la base des informations de rupture pour vérifier si le téléchargement est terminé, par exemple:
$expectedChunks = ceil($fileSize / $chunkSize);
if ($uploadedChunks == $expectedChunks) {
// Fusionner les fichiers
}
L'utilisation de la fonction CEIL () peut facilement faire face au problème du comptage du nombre d'éclats de téléchargement de piles. En utilisant rationnellement les fonctions intégrées de PHP et les fonctions de fonctionnement des fichiers, le téléchargement et la fusion de fichiers volumineuses peuvent être complétées efficacement et robuste. Que vous créiez un système de stockage de fichiers ou que vous fournissiez aux utilisateurs une expérience de téléchargement plus conviviale, il est très nécessaire de maîtriser cette technique.