Tạo file zip trong PHP

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

Chia sẻ nhanh bài viết ↓

Hieu

"Những người điên rồ tới mức nghĩ mình có thể thay đổi được thế giới chính là những người có thể làm được điều đó" _ Steve Job

Subscribe
Notify of
guest

2 Bình Luận
Newest
Oldest Most Voted
TanNguyen
TanNguyen
10 năm trước

đ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

Trong Hieu
Trong Hieu
Phản hồi đến  TanNguyen
10 năm trước

đ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

2
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x