Maison  >  Article  >  développement back-end  >  Comment envoyer et recevoir des packages compressés en volumes via PHP ZipArchive ?

Comment envoyer et recevoir des packages compressés en volumes via PHP ZipArchive ?

WBOY
WBOYoriginal
2023-07-21 11:04:48841parcourir

Comment envoyer et recevoir des packages compressés en volumes via PHP ZipArchive ?

Dans le développement Web, il est parfois nécessaire de regrouper des fichiers volumineux ou plusieurs fichiers dans des packages compressés pour la transmission. Cependant, en raison des limitations de transmission du réseau, il arrive parfois que l'intégralité du package compressé ne puisse pas être envoyée ou reçue en une seule fois. Afin de résoudre ce problème, nous pouvons utiliser la classe ZipArchive de PHP pour envoyer et recevoir des packages compressés en volumes.

  1. Créer un package compressé en volume divisé

Tout d'abord, nous devons créer une instance de package compressé et définir quelques paramètres de base. Ensuite, nous pouvons utiliser la méthode addFile() pour ajouter les fichiers qui doivent être compressés au package compressé. Après avoir ajouté tous les fichiers, utilisez la méthode split() pour diviser l'archive en plusieurs volumes. Ensuite, nous pouvons utiliser la méthode renameIndex() pour changer le nom de chaque volume selon la règle de dénomination spécifiée. Enfin, utilisez la méthode close() pour fermer le package compressé.

Ce qui suit est un exemple de code :

$zip = new ZipArchive();
$zip_name = 'files.zip';
$chunk_size = 1024 * 1024; // 分卷大小,默认为1MB
$split_index = 1; // 第一个分卷的索引

if ($zip->open($zip_name, ZipArchive::CREATE) === TRUE) {
    $files = array('file1.jpg', 'file2.png', 'file3.txt');
    
    foreach ($files as $file) {
        $zip->addFile($file);
    }
    
    $zip->split($chunk_size);
    
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $zip->renameIndex($i, $split_index . '_' . $zip->getNameIndex($i));
        $split_index++;
    }
    
    $zip->close();
}

Le code ci-dessus crée d'abord un objet ZipArchive, spécifie le nom de fichier du package compressé comme « files.zip » et la taille du volume est de 1 Mo. Ensuite, trois fichiers ont été ajoutés au package compressé. Ensuite, utilisez la méthode split() pour diviser le package compressé en plusieurs volumes et utilisez la méthode renameIndex() pour modifier le nom de chaque volume selon la règle de dénomination spécifiée. Enfin, fermez le package compressé via la méthode close().

  1. Réception du colis compressé en volumes séparés

L'extrémité réceptrice doit d'abord intégrer tous les volumes reçus dans un colis compressé complet. Nous pouvons utiliser la méthode merge() fournie par la classe ZipArchive pour y parvenir. Ensuite, utilisez la méthode extractTo() pour extraire les fichiers du package compressé dans le répertoire spécifié.

Ce qui suit est un exemple de code :

$zip = new ZipArchive();
$zip_name = 'files.zip';
$chunk_size = 1024 * 1024; // 分卷大小,默认为1MB
$output_dir = 'output/';

// 获取所有分卷文件
$files = glob('*.zip');

if ($zip->open($zip_name, ZipArchive::CREATE) === TRUE) {
    foreach ($files as $file) {
        $zip->merge($file, $zip->numFiles);
    }
    
    $zip->extractTo($output_dir);
    $zip->close();

    // 删除所有分卷文件
    foreach ($files as $file) {
        unlink($file);
    }
}

Le code ci-dessus crée d'abord un objet ZipArchive, spécifie le nom de fichier du package compressé comme « files.zip » et la taille du volume est de 1 Mo. Ensuite, utilisez la fonction glob() pour obtenir tous les fichiers de volume. Ensuite, utilisez la méthode merge() pour intégrer tous les volumes dans un package compressé complet. Enfin, utilisez la méthode extractTo() pour extraire les fichiers du package compressé vers le répertoire de sortie spécifié. Une fois la décompression terminée, supprimez tous les fichiers de volume via la fonction unlink().

Grâce à l'exemple de code ci-dessus, nous pouvons utiliser la classe PHP ZipArchive pour envoyer et recevoir des packages compressés en volumes. Cela permet un meilleur contrôle et un meilleur traitement des transferts de fichiers volumineux, améliorant ainsi l'efficacité et la stabilité du transfert.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn