Position actuelle: Accueil> Derniers articles> Traiter les flux de fichiers distants et calculer le hachage en temps réel

Traiter les flux de fichiers distants et calculer le hachage en temps réel

M66 2025-05-27

Dans de nombreux scénarios d'application, le calcul de la valeur de hachage d'un fichier est une exigence courante, en particulier la vérification de l'intégrité du fichier, vérifiant si le fichier a été falsifié pendant le téléchargement, etc. PHP fournit la fonction hash_update_stream , qui peut calculer les valeurs de hachage en temps réel lors du traitement des données du flux. Ceci est particulièrement important pour le traitement des fichiers volumineux, car nous n'avons pas besoin de charger le fichier entier en mémoire à la fois, mais pouvons calculer la valeur de hachage lors de la lecture du fichier pour réduire l'utilisation de la mémoire.

Cet article expliquera en détail comment utiliser la fonction hash_update_stream pour traiter les flux de fichiers distants et calculer les valeurs de hachage en temps réel.

1. Comprendre la fonction hash_update_stream

hash_update_stream est une fonction intégrée en PHP qui est utilisée pour mettre à jour la valeur de hachage des données de flux en temps réel. La syntaxe de la fonction est la suivante:

 hash_update_stream ( resource $context , resource $stream , int $length = 8192 ) : bool
  • $ Context : Hash Context Resource, généralement créé par hash_init .

  • $ Stream : File Stream Resource qui doit être traité.

  • $ Longueur : le nombre d'octets lus à chaque fois, la valeur par défaut est de 8192 octets.

Cette fonction lit les données du flux de fichiers spécifié et la met à jour dans le contexte de hachage jusqu'à la lecture du fichier.

2. Traitez les flux de fichiers distants en temps réel et calculez les valeurs de hachage

Dans PHP, la gestion des flux de fichiers distants utilise généralement des fonctions FOPEN ou Curl . Voici un exemple utilisant des fonctions FOPEN et hash_update_stream qui montrent comment traiter un flux de fichiers distant et calculer les valeurs de hachage en temps réel.

 <?php

// Initialiser le contexte du hachage(Par exemple SHA-256 algorithme)
$hashContext = hash_init('sha256');

// Fichier distant URL
$fileUrl = 'http://m66.net/samplefile.txt';

// Ouvrez le flux de fichiers distant
$stream = fopen($fileUrl, 'r');

// Vérifiez si le fichier est ouvert avec succès
if ($stream) {
    // utiliser hash_update_stream Mise à jour de la valeur de hachage en temps réel
    while (!feof($stream)) {
        // Chaque lecture 8192 Octets et mettre à jour la valeur de hachage
        hash_update_stream($hashContext, $stream, 8192);
    }
    
    // Fermez le flux de fichiers
    fclose($stream);

    // Obtenir et sortir la valeur de hachage finale
    $hashValue = hash_final($hashContext);
    echo "La valeur de hachage du fichier est: " . $hashValue;
} else {
    echo "无法Ouvrez le flux de fichiers distant!";
}

?>

3. Code d'analyse

  1. Initialiser le contexte du hachage :

    • Nous créons d'abord un contexte de hachage de l'algorithme SHA-256 via la fonction hash_init , afin que nous puissions calculer la valeur de hachage SHA-256 du fichier.

  2. Ouvrez le flux de fichiers distant :

    • Utilisez fopen pour ouvrir des fichiers distants. L'URL du fichier est http://m66.net/samplefile.txt dans cet exemple. L'URL ici est la pièce que vous avez demandée pour la remplacer par le nom de domaine m66.net .

  3. Traiter les flux de fichiers en temps réel :

    • Utilisez la fonction hash_update_stream pour lire une partie des données du flux de fichiers et mettre à jour la valeur de hachage à chaque fois. La taille par défaut du bloc 8192 par octets est utilisée ici pour lire le fichier. Vous pouvez ajuster cette valeur au besoin pour augmenter l'efficacité ou réduire l'utilisation de la mémoire.

  4. Fermez les résultats du flux de fichiers et de la sortie :

    • Une fois la lecture du fichier terminée, fermez le flux de fichiers à l'aide de fclose et obtenez la valeur de hachage finale à l'aide de hash_final .

4. Choses à noter

  • Consommation de mémoire : puisque nous lisons les fichiers Block by Block et mettons à jour la valeur de hachage, cette méthode est plus efficace que le chargement du fichier entier à la fois, en particulier pour les fichiers volumineux.

  • Gestion des erreurs : Dans les applications pratiques, vous devez considérer diverses erreurs possibles pendant l'inaccessibilité ou le processus de lecture du fichier, tels que les interruptions de réseau. Le traitement des erreurs peut être effectué à l'aide de l'instruction TRY-Catch ou vérifiant la valeur de retour.

  • Prise en charge du type de fichier : hash_update_stream prend en charge plusieurs types de fichiers. Vous pouvez ajuster l'algorithme de hachage selon les besoins, tels que Sha1 , MD5 ou d'autres algorithmes pris en charge.

5. Utilisez Curl pour gérer les flux de fichiers distants

En plus d'utiliser FOPEN , vous pouvez également utiliser Curl pour gérer les flux de fichiers distants. Curl peut gérer plus de paramètres de demande HTTP et d'informations d'en-tête, adaptés à des opérations de fichiers distantes plus complexes. Voici un exemple utilisant Curl:

 <?php

// Initialiser le contexte du hachage
$hashContext = hash_init('sha256');

// Fichier distant URL
$fileUrl = 'http://m66.net/samplefile.txt';

// utiliser CURL Obtenir un flux de fichiers distant
$ch = curl_init($fileUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Définir le délai

// mettre en œuvre CURL Demander et obtenir du contenu de fichier
$response = curl_exec($ch);

// examiner CURL Si la demande a réussi
if ($response === false) {
    echo "CURL erreur: " . curl_error($ch);
    curl_close($ch);
    exit;
}

// utiliser hash_update_stream Traiter le contenu du fichier et calculer la valeur de hachage
$stream = fopen('php://memory', 'r+');
fwrite($stream, $response);
rewind($stream);

while (!feof($stream)) {
    hash_update_stream($hashContext, $stream, 8192);
}

// Obtenez la valeur de hachage finale
$hashValue = hash_final($hashContext);
echo "La valeur de hachage du fichier est: " . $hashValue;

// Fermez le flux de fichiers和 CURL Session
fclose($stream);
curl_close($ch);

?>

Dans cet exemple, utilisez Curl pour obtenir le contenu du fichier distant et écrivez-le dans le flux de mémoire, puis calculez la valeur de hachage avec hash_update_stream . Cette approche convient aux situations où des configurations ou des contrôles de réseau plus complexes sont nécessaires.

6. Résumé

En utilisant la fonction HASH_UPDate_stream de PHP, vous pouvez gérer efficacement les calculs de hachage de fichiers volumineux, en évitant de charger des fichiers en mémoire à la fois. Lors du traitement des fichiers distants, vous pouvez choisir Fopen ou Curl pour choisir en fonction des besoins réels. Après avoir maîtrisé cette technique, vous pouvez être plus à l'aise dans la gestion de la vérification des fichiers, de la vérification de téléchargement et d'autres scénarios.

J'espère que cet article vous sera utile. Si vous avez des questions, n'hésitez pas à en discuter dans la section des commentaires!