Maison  >  Article  >  cadre php  >  Créez des fichiers compressés Zip dans Laravel et fournissez des exemples de code téléchargeables

Créez des fichiers compressés Zip dans Laravel et fournissez des exemples de code téléchargeables

不言
不言avant
2019-04-02 11:35:353753parcourir

Le contenu de cet article concerne la création de fichiers compressés Zip dans Laravel et la fourniture d'exemples de code à télécharger. Il a une certaine valeur de référence. Les amis dans le besoin pourront s'y référer. vous aide.

Si vous avez besoin que vos utilisateurs prennent en charge plusieurs téléchargements de fichiers, le meilleur moyen est de créer un package compressé et de le fournir en téléchargement. Jetez un œil à l’implémentation dans Laravel.

En fait, il ne s'agit pas de Laravel, mais plutôt de PHP. Nous allons utiliser la classe ZipArchive qui existe depuis PHP 5.2. Si vous souhaitez l'utiliser, vous devez vous en assurer php.iniext-zip dans 🎜> est activée. Tâche 1 : Stocker le fichier de facture de l'utilisateur dans storage/invoices/aaa001.pdf

Voici l'affichage du code :

L'exemple est simple, n'est-ce pas ?
$zip_file = 'invoices.zip'; // 要下载的压缩包的名称

// 初始化 PHP 类
$zip = new \ZipArchive();
$zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);

$invoice_file = 'invoices/aaa001.pdf';

// 添加文件:第二个参数是待压缩文件在压缩包中的路径
// 所以,它将在 ZIP 中创建另一个名为 "storage/" 的路径,并把文件放入目录。
$zip->addFile(storage_path($invoice_file), $invoice_file);
$zip->close();

// 我们将会在文件下载后立刻把文件返回原样
return response()->download($zip_file);

Tâche 2 : Compresser tous les fichiers dans le répertoire storage/invoices

Aucune modification n'est requise du côté de Laravel, il nous suffit d'ajouter du code PHP simple pour parcourir ces fichiers.

Ceci est fondamentalement terminé. Vous voyez, vous n'avez besoin d'aucune extension Laravel pour implémenter cette méthode de compression.
$zip_file = 'invoices.zip';
$zip = new \ZipArchive();
$zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);

$path = storage_path('invoices');
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
foreach ($files as $name => $file)
{
    // 我们要跳过所有子目录
    if (!$file->isDir()) {
        $filePath     = $file->getRealPath();

        // 用 substr/strlen 获取文件扩展名
        $relativePath = 'invoices/' . substr($filePath, strlen($path) + 1);

        $zip->addFile($filePath, $relativePath);
    }
}
$zip->close();
return response()->download($zip_file);

[Recommandations associées :

Tutoriel vidéo PHP

]


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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer