Câu trả lời:
Bạn có thể sử dụng ZipArchive
lớ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.
$zip = new ZipArchive;
thay vì $zip = new ZipFile;
?
Đâ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();
Tạo tệp zip, sau đó tải tệp xuống, bằng cách đặt tiêu đề, đọc nội dung zip và xuất tệp.
http://www.php.net/manual/en/ Chức năng.ziparchive-addfile.php
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