Tạo file zip trong PHP
1. Tạo file zip trong php là gì ?
Zip bạn có thể hiểu nó như một thùng chứa, bên trong thùng chứa này sẽ chứa tất cả các file dưới dạng nén. Điều này vô cùng có lợi khi bạn muốn giảm dung lượng của file, nhẹ hệ thống, giúp cho quá trình download, upload file được diễn ra nhanh chóng hơn. Tạo file zip trong php chính là sử dụng thư viện hỗ trợ của PHP để giúp nén các file lại trong thùng chứa zip 1 cách dễ dàng.
2. Hướng dẫn tạo file zip trong PHP
PHP cung cấp 1 thư viện gọi là ZipArchive , nó hỗ trợ cho lập trình viên có thể tạo file zip trong PHP một cách dễ dàng. Để có thể tạo file zip trong php các bạn xem qua một đoạn code nhỏ thực thi việc tạo file zip như sau :
Ví dụ 1 :
// Khởi tạo đối tượng ZipArchive
$zip = new ZipArchive();
// Dùng zip open để đặt tên cho tên file zip sẽ được tạo ra ví dụ abc.zip, xyz.zip
$zip->open('đường_dẫn_file_zip', ZipArchive::CREATE);
// Thêm file some-file.pdf vào zip, đồng thời đổi lại thành tên filename.pdf
$zip->addFile('some-file.pdf', 'filename.pdf');
// Thêm file another-file.xlsx vào zip, đồng thời đổi lại thành tên filename.xlsx
$zip->addFile('another-file.xlxs', 'filename.xlxs');
// Close để hoàn thành tiến trình zip file
$zip->close();
Giải thích : Ở đoạn code trên, đầu tiên chúng ta chỉ đơn giản là khởi tạo đối tượng ZipArchive để sử dụng tính năng zip của PHP, tiếp đến đưa các file cần zip vào. Kết quả của đoạn code trên sẽ cho chúng ta một file zip chứa các tập tin mà ta đã thêm vào.
Ví dụ 2 :
Cũng tương tự như ví dụ 1, nhưng ở đây mình sẽ viết một function để tiện trong việc xử lý zip nhiều file. Xem đoạn code dưới đây :
<?php
function create_zip($files = array(),$destination = '',$overwrite = false) {
// Nếu file zip đã tồn tại và overwite là false thì trả về false
if(file_exists($destination) && !$overwrite) { return false; }
// Tạo mảng để kiểm tra nếu file trong array files tồn tại thì add vào mảng valid_files
$valid_files = array();
// Kiểm tra nếu files là mảng
if(is_array($files)) {
// Chạy vòng lặp duyệt qua mảng files
foreach($files as $file) {
// Kiểm tra nếu file trong mảng tồn tại
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
// Nếu $valid_files ok
if(count($valid_files)) {
// thì tạo file zip
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
// Thêm file trong mảng files vào file zip
foreach($valid_files as $file) {
$zip->addFile($file,$file);
}
// Đóng tiến trình zip
$zip->close();
//check to make sure the file exists
return file_exists($destination);
}
else
{
return false;
}
}
P/s : Mình đã comment khá kỹ ở đoạn code trên, hy vọng các bạn đọc sẽ hiểu :p. Nếu có thắc mắc thì để lại comment bên dưới hen.
Cách sử dụng function trên như sau :
$files_to_zip = array( 'images/1.jpg', 'images/2.jpg', 'images/5.jpg', 'images/ringo.gif', 'rod.jpg', 'reddit.gif' ); // nếu $result trả về true là zip ok, ngược lại là fail :p $result = create_zip($files_to_zip,'my-archive.zip');
3. Tổng kết
Với 2 đoạn code zip file đơn giản trên là bạn có thể sử dụng để giải quyết những vấn đề giảm tại dung lượng file khi upload hoặc download trong ứng dụng website của bạn 1 cách tối ưu. Chúc các bạn học tốt !
Nguồn : kungfuphp.com


đoạn code này dùng để nén các file html hả bạn? Sử dụng nó trong wordpress như thế nào bạn? Cám ơn
đoạn code này là nén bất kỳ file nào nha bạn : html, pdf, images,…. Trong wordpress thì đã có plugin hỗ trợ rồi. Bạn ko cần phải code đâu