Wenn Sie Dateien hochladen, ist die Gewährleistung der Integrität und Sicherheit von Dateien ein sehr wichtiger Schritt. Um zu überprüfen, ob die Datei während des Hochladens manipuliert wurde, können wir die Hash -Überprüfung verwenden. PHP liefert Hash_Update_Stream -Funktion, die eine effiziente Hash -Überprüfung großer Dateien ermöglicht.
In diesem Artikel wird ausführlich eingeführt, wie die Funktion von Hash_Update_Stream verwendet wird, um die Hash -Überprüfung von Dateien durchzuführen und die Sicherheit von Dateien zu gewährleisten.
Hash_Update_Stream ist eine integrierte Hash-Funktion in PHP. Es kann einen Stream (z. B. einen Dateistrom) in Echtzeit verarbeiten und ihn hasht. Im Vergleich zum Laden der gesamten Datei für die Hash -Überprüfung kann die Funktion von Hash_Update_Stream Speicherressourcen speichern und für die Überprüfung großer Dateien geeignet sind.
Die Funktionssignatur ist wie folgt:
bool hash_update_stream ( resource $context , resource $file )
$ context : Hash -Kontextressource, erstellt von Hash_init -Funktion.
$ Datei : Dateiressource, normalerweise ein von der FOPEN -Funktion geöffneter Dateistrom.
Beim Hochladen von Dateien verwenden Sie normalerweise das Hyperglobal -Array $ _files , um Dateiinformationen zu erhalten. Vor der Durchführung der Hash -Überprüfung müssen wir überprüfen, ob die Datei gültig ist, und sie verarbeiten.
Hier ist ein grundlegendes Beispiel für das Hochladen einer Datei:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
// Überprüfen Sie, ob die Datei erfolgreich hochgeladen wird
if ($file['error'] === UPLOAD_ERR_OK) {
$filePath = $file['tmp_name']; // Temporärer Dateipfad
$fileName = $file['name'];
// Hash -Überprüfung durchführen
if (checkFileHash($filePath)) {
echo "Datei -Hash -Überprüfung erfolgreich,Dateisicherheit。";
} else {
echo "Datei -Hash -Überprüfung fehlgeschlagen,Die Datei wurde möglicherweise manipuliert。";
}
} else {
echo "Datei -Upload fehlgeschlagen,Fehlercode:" . $file['error'];
}
}
Als nächstes schreiben wir eine CheckFileHash -Funktion, die die Funktion der hochgeladenen Datei hash_update_stream hasht.
function checkFileHash($filePath) {
// Erstellen aSHA256Hash -Kontext
$hashContext = hash_init('sha256');
// Öffnen Sie den Dateistrom
$fileStream = fopen($filePath, 'rb');
if ($fileStream === false) {
return false; // 无法Öffnen Sie den Dateistrom
}
// verwenden hash_update_stream Hashing des Dateistroms
if (hash_update_stream($hashContext, $fileStream)) {
// Holen Sie sich den endgültigen Hash -Wert
$fileHash = hash_final($hashContext);
fclose($fileStream);
// Sie können den Hash -Wert mit dem erwarteten Wert vergleichen,Stellen Sie sicher, dass die Datei nicht manipuliert wurde
// Beispielwerte hier `Erwarteter Hash -Wert` Als Beispiel,Sie müssen es durch den tatsächlichen korrekten Hash -Wert ersetzen
$expectedHash = 'Erwarteter Hash -Wert';
return $fileHash === $expectedHash;
}
fclose($fileStream);
return false; // Die Hash -Berechnung ist fehlgeschlagen
}
Der Hauptvorteil der Funktion von Hash_Update_Stream besteht darin, dass sie Streaming -Daten verarbeiten kann, ohne die gesamte Datei in den Speicher zu laden. Für große Dateien ist die Verwendung von Hash_Update_Stream effizienter als das Laden der gesamten Datei gleichzeitig und die Berechnung von Hash, insbesondere in Umgebungen mit begrenzten Speicherressourcen.
Verwenden der Funktion von Hash_Update_Stream zur Hash -Überprüfung in hochgeladenen Dateien können die Dateien nicht nur effektiv verhindern, dass Dateien beim Hochladen manipuliert werden, sondern auch große Dateien verarbeiten und vermeiden, zu viel Speicher zu verbrauchen. Durch die Kombination des Hash -Werts der Datei mit dem erwarteten Wert können wir die Integrität der Datei überprüfen und so die Sicherheit des Systems verbessern.
In praktischen Anwendungen können Sie verschiedene Hashing -Algorithmen (wie SHA256 , MD5 usw.) entsprechend Ihrer Anforderungen zur Durchführung der Dateiüberprüfung auswählen.