使用php创建和下载zip文件

时间:2014-02-04 15:51:54

标签: php codeigniter zip download

我正在尝试为此创建一个zip文件(使用php),我已经编写了以下代码:

$fileName = "1.docx,2.docx";
$fileNames = explode(',', $fileName);
$zipName = 'download_resume.zip';
$resumePath = asset_url() . "uploads/resume/";
//http://localhost/mywebsite/public/uploads/resume/

$zip = new ZipArchive();
if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) {
    echo json_encode("Cannot Open");
}

foreach ($fileNames as $files) {
    $zip->addFile($resumePath . $files, $files);
}
$zip->close();
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zipName."");
header("Content-length: " . filesize($zipName));
header("Pragma: no-cache"); 
header("Expires: 0");
readfile($zipName);
exit;

然而,在按钮上单击我没有得到任何东西......甚至没有任何错误或消息..

任何帮助或建议对我都有很大的帮助..提前感谢

5 个答案:

答案 0 :(得分:6)

为什么不在Codeigniter中使用Zip编码类 - 它会为您执行此操作

$name = 'mydata1.txt';
$data = 'A Data String!';

$this->zip->add_data($name, $data);

// Write the zip file to a folder on your server. Name it "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip'); 

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

https://www.codeigniter.com/user_guide/libraries/zip.html

答案 1 :(得分:1)

  1. 什么是asset_url()功能?尝试使用APPPATH常量而不是此函数:

    $resumePath = APPPATH."../uploads/resume/";
  2. 为文件名添加“存在”验证:

    foreach ($fileNames as $files) {
        if (is_file($resumePath . $files)) {
            $zip->addFile($resumePath . $files, $files);
        }
    }
  3. 在{:1>}之后添加exit()

    echo json_encode("Cannot Open");
  4. 另外我认为使用CI zip库User Guide是更好的选择。简单的例子:

    public function generate_zip($files = array(), $path)
    {
        if (empty($files)) {
            throw new Exception('Archive should\'t be empty');
        }
        $this->load->library('zip');
        foreach ($files as $file) {
            $this->zip->read_file($file);
        }
        $this->zip->archive($path);
    }
    
    public function download_zip($path)
    {
        if (!file_exists($path)) {
            throw new Exception('Archive doesn\'t exists');
        }
        $this->load->library('zip');
        $this->zip->download($path);
    }
    

答案 2 :(得分:1)

......它适合我

public function downloadall(){

        $createdzipname = 'myzipfilename';

        $this->load->library('zip');
        $this->load->helper('download');
        $cours_id = $this->input->post('todownloadall');
        $files = $this->model_travaux->getByID($cours_id); 

        // create new folder 
        $this->zip->add_dir('zipfolder');

        foreach ($files as $file) {
            $paths = 'http://localhost/uploads/'.$file->file_name.'.docx';
            // add data own data into the folder created
            $this->zip->add_data('zipfolder/'.$paths,file_get_contents($paths));    
        }
        $this->zip->download($createdzipname.'.zip');
    }

答案 3 :(得分:0)

下面的脚本在我的本地系统中工作正常。首先从$ resumePath中删除asset_url()并设置zip文件存储位置相对路径。 - 将zip文件名及其位置路径传递给$ zip-> open()

$fileName = "1.docx,2.docx";
$fileNames = explode(',', $fileName);
$zipName   = 'download_resume.zip';
$resumePath = "resume/";

$zip = new ZipArchive();
if ($zip->open($resumePath.$zipName, ZIPARCHIVE::CREATE) !== TRUE) {
 echo json_encode("Cannot Open");
}

foreach ($fileNames as $files) {
 $zip->addFile($files, $files);
}
$zip->close();

答案 4 :(得分:0)

/ *创建zip文件夹* /

public function zip(){
    $getImage = $this->cart_model->getImage();
    $zip = new ZipArchive;
    $auto = rand();
    $file = date("dmYhis",strtotime("Y:m:d H:i:s")).$auto.'.zip';
    if ($zip->open('./download/'.$file,  ZipArchive::CREATE)) {
        foreach($getImage as $getImages){
            $zip->addFile('./assets/upload/photos/'.$getImages->image, $getImages->image);
        }
        $zip->close();
        $downloadFile = $file;
        $download = Header("Location:http://localhost/projectname/download/".$downloadFile);


    }
}

模型------

/ *获取添加到购物车图片* /

public function getImage(){
    $user_id = $this->session->userdata('user_id');
    $this->db->select('tbl_cart.photo_id, tbl_album_image.image as image');
    $this->db->from('tbl_cart');
    $this->db->join('tbl_album_image', 'tbl_album_image.id = tbl_cart.photo_id', 'LEFT');
    $this->db->where('user_id', $user_id);
    return $this->db->get()->result();
}