この記事の内容は、Laravel で Zip 圧縮ファイルを作成し、ダウンロードするためのコード例を提供するものであり、一定の参考価値があります。必要な友人は参考にしてください。あなた、助けます。
ユーザーが複数のファイルのダウンロードをサポートする必要がある場合、最良の方法は、圧縮パッケージを作成してダウンロード用に提供することです。 Laravelでの実装を見てみましょう。
実際、これは Laravel に関するものではなく、PHP に関連したものです。PHP 5.2 から存在する ZipArchive クラスを使用します。これを使用したい場合は、確認する必要がありますphp.ini の ext-zip 拡張子が有効になっています。
タスク 1: ユーザーの請求書ファイルを storage/invoices/aaa001.pdf
コード表示は次のとおりです:
$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);
例は簡単ですよね。
タスク 2: すべてのファイルを storage/invoices ディレクトリに圧縮する
Laravel 側に変更は必要ありません。これらのファイルを反復処理するための単純な PHP コードを追加するだけです。
$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);
これで基本的には完了です。この圧縮方法を実装するために Laravel 拡張機能は必要ありません。
【関連する推奨事項: PHP ビデオ チュートリアル ]
##
以上がLaravel で Zip 圧縮ファイルを作成し、ダウンロード可能なコードサンプルを提供するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。