Zip zip là gì?

Zip bạn có thể hiểu nó giống như một thùng chứa, bên trong thùng chứa này sẽ chứa tất cả các tệp 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 file, làm nhẹ hệ thống, giúp quá trình download, upload file diễn ra nhanh hơn. Tạo tệp zip trong php chính là sử dụng thư viện hỗ trợ của PHP để giúp nén các tệp lại trong thùng chứa zip 1 cách dễ dàng

2. Hướng dẫn tạo tệp zip trong PHP

PHP cung cấp 1 thư viện gọi là ZipArchive , nó hỗ trợ lập trình viên có thể tạo tệp 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 mã 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 mã trên, đầu tiên chúng ta chỉ đơn giản là khởi động tạo đối tượng ZipArchive để sử dụng tính năng zip của PHP, tiếp theo là đưa các tệp cần nén vào. Kết quả của đoạn mã trên sẽ cho chúng ta một tệp zip chứa các tệp mà chúng 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 chức năng để thuận tiện trong việc xử lý nhiều tệp zip. Xem đoạn mã dưới đây

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, mong 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 chức năng 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 tệp zip 2 đoạn mã đơn giản là bạn có thể sử dụng để giải quyết các vấn đề giảm dung lượng tệp khi tải lên hoặc tải xuống trong trang web ứng dụng của bạn 1 cách tối ưu nhất. Chúc các bạn học tốt

Nguồn. võ công. com

Hiếu

“Cuộc đời chỉ có một, vì thế hãy làm những gì khiến bạn hạnh phúc và ở bên những người khiến bạn luôn mỉm cười”

1) If you want to add files to a ZIP archive but you don't know if the ZiP file exists or not, you MUST check: this changes the way you open it !.
2) you can not append multiple flags, can use only one (or none).

If the zip does not exists, open it with:
$ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE)
(or a different compression method)

If the zip already exists, open it with:
$ziph->open($archiveFile)
or
$ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS)

Example: make backup files every hour and ZIP them all in a daily ZIP archive, so you want to get only one ZIP per day, each ZIP containing 24 files:
  function archivebackup($archiveFile, $file, &$errMsg)
  {
    $ziph = new ZipArchive();
    if(file_exists($archiveFile))
    {
      if($ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
      {
        $errMsg = "Unable to Open $archiveFile";
        return 1;
      }
    }
    else
    {
      if($ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE) !== TRUE)
      {
        $errMsg = "Could not Create $archiveFile";
        return 1;
      }
    }
    if(!$ziph->addFile($file))
    {
      $errMsg = "error archiving $file in $archiveFile";
      return 2;
    }
    $ziph->close();

    return 0;
  }
?>