1

ここに画像の説明を入力

上の画像のように、仮想フォルダー (実際のフォルダーではなく mysql データベース内) に整理された画像があります。選択したフォルダーを zip としてダウンロードできるようにする必要があります 。画像を圧縮できましたが、画像を追加するためにサブディレクトリを追加するにはどうすればよいですか (使用してみましたが、画像を追加する方法がわかり addEmptyDir()ませんでした! )。これは、物理フォルダーを作成せずに本当に可能ですか?

提案してください!

4

2 に答える 2

7

@dnagirlの回答に感謝しますが、実際にはサブフォルダー内にファイルを追加する方法を探していました(おそらく、自分自身を明確にすることができませんでした!)

' 'path/to/filenameだけでなく''を指定すると、zipArchiveが自動的にフォルダを作成することを発見しましたfilename

誰かがそれを必要とするかもしれない場合に備えて、これは私がそれを達成した方法です!

function zipFilesAndDownload($file_names,$archive_file_name,$img_localpath)
{
  $folder_path=WSP_AK_PLUGIN_DIR ."akTempFolder/";
  $zip = new ZipArchive();
  if ($zip->open($folder_path.$archive_file_name, ZIPARCHIVE::CREATE )===TRUE) {
    //$zip->addEmptyDir('myimages');(this was what i thought would create folder!)
    foreach($file_names as $files)
    {
        //$zip->addFile($img_localpath.'/'.$files, 'myfolder/'.$files);
        $zip->addFile($img_localpath.'/'.$files['fileName'],    $files['folder_path'].$files['fileName']);
    }
    $zip->close();

上記のコードで$files['folder_path']は、ファイルが作成されるファイルへのパスが示されます。folder1/folder2/image1.jpg

    header("Content-type: application/zip"); 
    header("Content-Disposition: attachment; filename=$archive_file_name");
    header('Content-Type: application/force-download');
    header('Content-Length: ' . filesize($folder_path.$archive_file_name));
    header("Pragma: no-cache"); 
    header("Expires: 0");
    if( file_exists($folder_path.$archive_file_name)) {
        ob_clean();
        readfile($folder_path.$archive_file_name);
    }
    unlink($folder_path.$archive_file_name);
  }
}
于 2012-09-23T09:21:23.830 に答える
1

zip ディレクトリに追加する「ファイル」が文字列としてデータベースに格納されている場合は、ZipArchive::addFromString. データベースが実際のファイルへのポインターを格納する場合は、ZipArchive::addFile

于 2012-08-13T11:59:44.507 に答える