Dans le développement Web, il est très important de vérifier l'intégrité des fichiers et d'éviter la falsification des fichiers. PHP fournit des fonctions de manipulation de fichiers puissantes qui peuvent être utilisées pour assurer la sécurité et l'intégrité des fichiers téléchargés. La fonction hash_update_stream est un outil utile pour la mise à jour en temps réel des valeurs de hachage. Il convient au calcul de la valeur de hachage d'un fichier étape par étape lors du traitement des fichiers volumineux (tels que des images) sans charger le fichier entier en mémoire.
Cet article présentera comment utiliser la fonction hash_update_stream pour effectuer une vérification de hachage en temps réel des images téléchargées et s'assurer que le contenu du fichier n'a pas été modifié.
Pendant le processus de téléchargement de fichiers, afin de s'assurer que le fichier n'a pas été falsifié, nous pouvons utiliser un algorithme de hachage (tel que SHA-256 ou MD5) pour calculer la valeur de hachage du fichier. En comparant la valeur de hachage du fichier téléchargé avec la valeur de hachage attendue, nous pouvons déterminer si le fichier a été falsifié pendant le processus de transmission.
La fonction hash_update_stream est une fonction avancée en PHP qui nous permet de mettre à jour la valeur de hachage en temps réel lors du streaming du fichier. Ceci est très utile pour gérer les fichiers volumineux, car il évite de charger le fichier entier en mémoire.
Supposons que nous ayons un formulaire HTML qui permet aux utilisateurs de télécharger des images. Nous utiliserons PHP pour traiter le téléchargement de fichiers et calculer leur hachage. Nous allons diffuser le contenu du fichier et mettre à jour la valeur de hachage du fichier en temps réel pendant le processus de téléchargement.
Voici un exemple de code PHP simple montrant comment utiliser la fonction hash_update_stream pour effectuer une vérification de hachage en temps réel des images téléchargées.
<?php
// Set Télécharger le répertoire
$uploadDir = 'uploads/';
// Vérifiez s'il y a des téléchargements de fichiers
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
$file = $_FILES['image'];
// Assurez-vous que le fichier téléchargé est une image
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (in_array($file['type'], $allowedMimeTypes)) {
// Obtenez un chemin temporaire vers le fichier
$tempFile = $file['tmp_name'];
// Ouvrez le flux de fichiers
$fileHandle = fopen($tempFile, 'rb');
// Sélectionnez un algorithme de hachage
$hashContext = hash_init('sha256');
// utiliserhash_update_streamDiffusez la mise à jour du hachage des fichiers
while ($chunk = fread($fileHandle, 8192)) {
hash_update_stream($hashContext, $chunk);
}
// Obtenez la valeur de hachage finale
$fileHash = hash_final($hashContext);
// Imprimez la valeur de hachage du fichier téléchargé
echo "Uploaded file hash: " . $fileHash . "<br>";
// Fermez le flux de fichiers
fclose($fileHandle);
// Enregistrez le fichier dans le répertoire cible
move_uploaded_file($tempFile, $uploadDir . $file['name']);
// Supposons que nous précalculons la valeur de hachage du fichier
$expectedHash = 'Valeur de hachage pré-calculée';
// Comparez les valeurs de hachage
if ($fileHash === $expectedHash) {
echo "Fichier la vérification du hachage avec succès!";
} else {
echo "La vérification du hachage du fichier a échoué!";
}
} else {
echo "Seuls les téléchargements de fichiers image sont pris en charge!";
}
}
?>
<!-- Télécharger le formulaire -->
<form method="POST" enctype="multipart/form-data">
<label for="image">Télécharger des photos:</label>
<input type="file" name="image" id="image">
<button type="submit">Télécharger</button>
</form>
Formulaire de téléchargement de fichiers : Tout d'abord, nous avons créé un formulaire HTML à travers lequel les utilisateurs peuvent télécharger des fichiers image.
Vérifiez le type de fichier téléchargé : lors du traitement des fichiers, vérifiez d'abord si le type de fichier téléchargé est le format d'image autorisé (tel que JPEG, PNG, GIF).
Ouvrez le flux de fichiers : ouvrez un fichier temporaire qui télécharge des fichiers en mode binaire via la fonction fopen .
Initialiser l'algorithme de hachage : utilisez la fonction hash_init pour sélectionner un algorithme de hachage (comme SHA-256).
Valeur de hachage de mise à jour en temps réel : via la fonction hash_update_stream , lisez le bloc de contenu du fichier par bloc et mettez à jour la valeur de hachage en temps réel. La fonction Fread lit une partie des données dans le fichier et lit à chaque fois 8 Ko de contenu.
Calculez la valeur de hachage : une fois que tous les contenus du fichier sont lus, utilisez la fonction Hash_Final pour obtenir la valeur de hachage finale.
Enregistrer le fichier : si la vérification du hachage est passée, déplacez le fichier vers le répertoire de téléchargement spécifié.
Vérification du hachage : nous vérifions si le fichier a été falsifié en comparant la valeur de hachage calculée avec la valeur de hachage attendue.
La fonction hash_update_stream peut éviter les problèmes de débordement de mémoire lors du traitement des fichiers volumineux. Il lit le fichier comme un flux, lit un petit morceau de données à la fois (8KB dans ce cas) et met à jour la valeur de hachage pour chaque élément de données. Le streaming peut réduire considérablement l'utilisation de la mémoire, en particulier pour les fichiers volumineux, par rapport aux méthodes de calcul des valeurs de hachage en chargeant le fichier entier en mémoire.
L'utilisation de la fonction hash_update_stream pour la vérification du hachage de fichiers est un moyen efficace et sûr, en particulier lorsqu'il s'agit de fichiers volumineux. En calculant la valeur de hachage du fichier en temps réel, l'intégrité et la sécurité du contenu du fichier peuvent être assurées pendant le processus de téléchargement de fichiers et les fichiers empêchés d'être falsifiés.