Die Datei -Sharding ist eine sehr häufige Technik beim Implementieren der Funktion des Hochladens großer Dateien. Es kann eine super große Datei in mehrere kleine Fragmente aufteilen und nach dem anderen nach oben hochladen, um die Upload -Effizienz und die Erfolgsrate zu verbessern und nach Netzwerkunterbrechung eine kontinuierliche Übertragung des Haltepunkts zu erreichen.
In PHP spielt die CEIL () -Funktion eine wichtige Rolle bei der Berechnung des Shard -Uploads. In diesem Artikel wird ausführlich erläutert, wie CEIL () verwendet wird, um die Anzahl der zum Hochladen einer Datei erforderlichen Scherben zu berechnen.
CEIL () ist eine eingebaute mathematische Funktion in PHP, mit der eine Zahl abgerundet wird. Mit anderen Worten, egal wie viele Dezimalpunkte sind, sie werden es bis zur kleinsten Ganzzahl übertragen, die größer ist als es.
echo ceil(2.1); // Ausgabe 3
echo ceil(5.9); // Ausgabe 6
Stellen Sie sich vor, wir möchten eine Datei mit einer Größe von $ filesize Bytes in kleine Teile von $ chunksize -Bytes pro Slice hochladen. Die Gesamtzahl der Scherben kann durch die folgende Formel berechnet werden:
Anzahl der Scherben = Nach oben rassen ( Dateigröße / Größe der Scherben )
Dies ist genau der Zweck der CEIL () -Funktion.
Hier ist ein einfacher PHP -Code -Snippet, um zu berechnen, wie viele Dateien -Uploads unterteilt werden müssen in:
<?php
$fileSize = 10485760; // Dateigröße为 10MB(Einheit:Byte)
$chunkSize = 1048576; // Jedes Stück 1MB
$totalChunks = ceil($fileSize / $chunkSize);
echo "Die Gesamtzahl der zugeladenen Scherben ist: $totalChunks";
?>
Die Ausgabe wird sein:
Die Gesamtzahl der zugeladenen Scherben ist: 10
Das heißt, 10 MB Dateien, 1 MB pro Stück, genau 10 Scherben werden benötigt.
Das Front-End spaltet die Datei nach der festgelegten Shard-Größe durch JavaScript. Jedes Mal, wenn ein Shard hochgeladen wird, wird normalerweise die folgenden Parameter geliefert:
Der Index des aktuellen Shards (wie: Chunk 1, Chunk 2 ...)
Die Größe jedes Stücks
Datei eindeutige Bezeichnung (z. B. Verwendung von MD5 oder UUID )
Das Backend (mit PHP) empfängt jede Shard und speichert sie vorübergehend, bis alle Scherben hochgeladen sind, und verschmilzt diese Scherben dann in eine vollständige Datei.
<?php
$index = $_POST['chunkIndex']; // Aktueller Shard -Index
$total = $_POST['totalChunks']; // Gesamtzahl der Scherben
$fileId = $_POST['fileId']; // Datei eindeutige Kennung
$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) {
// Alle Scherben wurden hochgeladen,Führen Sie zusammen
$finalFile = fopen(__DIR__ . "/uploads/$fileId", 'ab');
for ($i = 0; $i < $total; $i++) {
$chunkPath = "$chunkDir/chunk_$i";
fwrite($finalFile, file_get_contents($chunkPath));
}
fclose($finalFile);
// Temporäre Scherben löschen
array_map('unlink', glob("$chunkDir/*"));
rmdir($chunkDir);
echo "Datei hochladen und erfolgreich zusammenführen!";
}
?>
In der tatsächlichen Bereitstellung können Sie die Upload -Schnittstelle für einen unabhängigen Service -Domänennamen wie https://upload.m66.net bereitstellen, wodurch die Upload -Geschwindigkeit verbessert und die wichtigsten Site -Ressourcen vermieden werden, die von einem großen Betrag besetzt sind.
Beispiel für Front-End-Upload-Anfrage: Beispiel:
fetch('https://upload.m66.net/upload.php', {
method: 'POST',
body: formData
});
Die Backend -PHP -Schnittstelle kann CEIL () basierend auf Sharding -Informationen aufrufen, um zu überprüfen, ob das Upload abgeschlossen ist, beispielsweise:
$expectedChunks = ceil($fileSize / $chunkSize);
if ($uploadedChunks == $expectedChunks) {
// Dateien zusammenführen
}
Die Verwendung der Funktion von CEIL () kann leicht mit dem Problem umgehen, die Anzahl der Scherben beim Shard -Upload zu zählen. Durch die rationale Verwendung der integrierten Funktionen von PHP und den Dateibetriebsfunktionen kann das Shard-Upload und die Verschmelzung großer Dateien effizient und robust abgeschlossen werden. Unabhängig davon, ob Sie ein Dateispeichersystem erstellen oder Benutzern ein freundlicheres Upload -Erlebnis bieten, ist es sehr notwendig, diese Technik zu beherrschen.