Tải xuống nhiều tệp dưới dạng tệp nén bằng php


112

Làm cách nào để tải xuống nhiều tệp dưới dạng tệp nén bằng php?


Bạn có thể sử dụng lib Lớp xip.lib.php. zip.lib.php Đối với các ví dụ, hãy tham khảo bài viết này
Abdel Raoof

Câu trả lời:


212

Bạn có thể sử dụng ZipArchivelớp để tạo tệp ZIP và truyền trực tuyến đến máy khách. Cái gì đó như:

$files = array('readme.txt', 'test.html', 'image.gif');
$zipname = 'file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
  $zip->addFile($file);
}
$zip->close();

và phát trực tuyến nó:

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);

Dòng thứ hai buộc trình duyệt hiển thị hộp tải xuống cho người dùng và nhắc tên filename.zip. Dòng thứ ba là tùy chọn nhưng một số trình duyệt (chủ yếu là cũ hơn) có vấn đề trong một số trường hợp nhất định mà không chỉ định kích thước nội dung.


4
Không nên $zip = new ZipArchive;thay vì $zip = new ZipFile;?
Matthieu

@Matthieu Dấu ngoặc đơn không cần thiết. Nhìn vào ví dụ: php.net/manual/en/ziparchive.open.php
Lars Gyrup Brink Nielsen

1
Biến $ zipfilename có nghĩa là gì?
Pascal Klein

$ zipfilename phải đọc là $ zipname - đó là tên tệp của zip được tạo dưới dạng chuỗi.
Chris,

1
Nó không hoạt động trong trình mở zip mặc định của cửa sổ nhưng hoạt động trong win zipper hoặc 7-zip. Tôi đang cố gắng để thêm hình ảnh trong thư mục zip và sau đó tải về như zip
RN Kushwaha

36

Đây là một ví dụ làm việc của việc tạo ZIP trong PHP:

$zip = new ZipArchive();
$zip_name = time().".zip"; // Zip name
$zip->open($zip_name,  ZipArchive::CREATE);
foreach ($files as $file) {
  echo $path = "uploadpdf/".$file;
  if(file_exists($path)){
  $zip->addFromString(basename($path),  file_get_contents($path));  
  }
  else{
   echo"file does not exist";
  }
}
$zip->close();

2
Câu trả lời này hoạt động! Sự khác biệt là addFromString, addFile được mã hóa kém.
André Catita


1

Bạn đã sẵn sàng làm với php zip lib và cũng có thể sử dụng zend zip lib,

<?PHP
// create object
$zip = new ZipArchive();   

// open archive 
if ($zip->open('app-0.09.zip') !== TRUE) {
    die ("Could not open archive");
}

// get number of files in archive
$numFiles = $zip->numFiles;

// iterate over file list
// print details of each file
for ($x=0; $x<$numFiles; $x++) {
    $file = $zip->statIndex($x);
    printf("%s (%d bytes)", $file['name'], $file['size']);
    print "
";    
}

// close archive
$zip->close();
?>

http://devzone.zend.com/985/dynamently-creating-compressed-zip-archives-with-php/

và cũng có php Le lib cho http://www.php.net/manual/en/class.ziparchive.php này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.