在wordpress中将所选文件下载为zip格式

时间:2014-05-21 04:45:35

标签: php wordpress

我正在使用wordpress模板页 download.php ,代码为:

    $ck=$_REQUEST['select'];
    $num=count($ck);

    $zip_file_name='demodown.zip';
    $zip = new ZipArchive();
     if ($zip->open($zip_file_name, ZIPARCHIVE::CREATE )!==TRUE)
           {
               exit("cannot open <$zip_file_name>\n");
           }
        $file_path = $_SERVER['DOCUMENT_ROOT']."/lab4/brazil_resource/wp-content/pdf_upload/";

    for($i=0;$i<$num;$i++)
    {
        $sql=mysql_query("select * from wp_pagecontent where id='$ck[$i]'");
        $f=mysql_fetch_array($sql);                                
        $files=$f['pdf_file'];
        $zip->addFile($file_path.$files,$files);   
    }
      $zip->close();
      header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="'.$zip_file_name.'"');
    exit;

使用上面的代码我无法压缩所选的文件。下载文件显示0字节大小。

请帮忙

2 个答案:

答案 0 :(得分:1)

我终于解决了它

$zip_file_name='demo.zip';
$zip = new ZipArchive();
$tmp_file = tempnam('.','');
$zip->open($tmp_file, ZipArchive::CREATE);

$file_path = content_url()."/pdf_upload/";

foreach($_REQUEST['select'] as $file)
{
    $download_file = $file_path.$file;
    $download_file2 = file_get_contents($download_file);
    $zip->addFromString('files/'.$file,$download_file2);
}
$zip->close();

if(file_exists($tmp_file))
{
    // push to download the zip
    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="'.$zip_file_name.'"');
    readfile($tmp_file);
    // remove zip file is exists in temp path
} 

答案 1 :(得分:0)

我用以下代码解决了另一个问题:

$zip_file_name='demo.zip';
$zip = new ZipArchive();
$tmp_file = tempnam('.','');
$zip->open($tmp_file, ZipArchive::CREATE);

for($i=0;$i<$num;$i++)
{
    $sql=mysql_query("select * from wp_pagecontent where id='$ck[$i]'");
    $f=mysql_fetch_array($sql);                                
    $files=$f['pdf_file'];
    $download_file = file_get_contents($files);
    //$fe=$file_path.$files;
    //$zip->addFromString(basename($fe),file_get_contents($fe));
    $zip->addFromString(basename($files),$download_file);   
}
$zip->close();
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$zip_file_name.'"');
header("Content-length: ".filesize($zip_file_name));
readfile($tmp_file);

exit;