※ ChatGPTを利用し、要約された質問です(原文:PHP 再帰的 ZipArchive)
PHPでサブディレクトリ内のファイルも含めてZipファイルを作成する方法
このQ&Aのポイント
PHPでサブディレクトリ内のファイルも含めてZipファイルを作成する方法について説明します。
指定したディレクトリ内のファイルを再帰的に取得し、Zipファイルに追加する処理を行います。
生成したZipファイルをダウンロードする際には、ヘッダー情報を設定してファイルをストリームに出力します。
現在サブディレクトリの中のファイルも含めZipファイルを作成していのですがうまくいきません
説明がうまくできませんが下記のサブディレクトリのtestだけが表示されファイルが取得できません。できればpath_uploadの中を階層を変えずzipで圧縮して取得したいです。
なにとぞよろしくお願いします。
path_upload----test-----test.txt
|--test2.txt
|--test3.txt
コード
define("file_zone","C:/MAMP/htdocs/upload/path_upload");
if(isset($_POST["download"])){
$path = file_zone;
$files = scandir($path);
$zip = new ZipArchive($files);
// Zipファイル名
$zipFileName = date("Ymd") .'.zip';
// Zipファイル一時保存ディレクトリ
$zipTmpDir = file_zone;
// Zipファイルオープン
$result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if ($result !== true) {
// 失敗した時の処理
}
// 処理制限時間を外す
set_time_limit(0);
foreach ($files as $filepath) {
$filename = basename($filepath);
// 取得ファイルをZipに追加していく
$zip->addFromString($filename,file_get_contents($filepath));
}
$zip->close();
// ストリームに出力
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header('Content-Type: application/zip; name="' . $zipFileName . '"');
header('Content-Disposition: attachment; filename="' . $zipFileName . '"');
header('Content-Length: '.filesize($zipTmpDir.$zipFileName));
echo file_get_contents($zipTmpDir.$zipFileName);
// 一時ファイルを削除しておく
// unlink($zipTmpDir.$zipFileName);
}