Hướng dẫn dùng zip bar trong PHP

Làm sao để thực hiện nén file .zip bằng PHP, bài viết này sẽ giới thiệu và hướng dẫn các bạn thực hiện nén file .zip bằng PHP một cách đơn giản.

Nội dung chính

  • File nén ZiP là gì?
  • Nén (compress) file trong PHP
  • Nén (compress) thư mục trong PHP
  • File nén ZiP là gì?
  • Nén (compress) file trong PHP
  • Nén (compress) thư mục trong PHP
  • 1. Tạo file zip trong php là gì ?
  • 2. Hướng dẫn tạo file zip trong PHP
  • 3. Tổng kết

Mục lục

    File nén ZiP là gì?

    File có phần mở rộng .zip hiện nay khá phổ biến và hiện nay được hỗ trợ ở hầu hết các hệ điều hành nếu không muốn nói là tất cả.

    File .zip là một dạng file nén dùng giảm dung lượng của một hay nhiều file mà nó chứa bên trong nhằm tối ưu khả năng lưu trữ, di chuyển và truyền tải trên Internet. Sự phổ biến của nó đến mức hiện nay “zip” được xem như một động từ. Ví dụ “Bạn zip file lại rồi gửi cho mình nhé” là một cách nói khá phổ biến cho hành động nén file để giảm dung lượng lưu trữ.

    Ngoài .zip bạn còn có nhiều định dạng khác cũng có chức năng tương tự như .rar , .7z nhưng .zip có lẽ là phổ biến nhất, được sử dụng nhiều nhất và hỗ trợ bởi nhiều hệ điều hành mà không cần cài đặt gì thêm.

    Nén (compress) file trong PHP

    Trong PHP, file .zip có thể tạo hoặc chính sửa thông qua một class được hỗ trợ sẵn là ZipArchive. Quá trình nén và đóng gói file nén sẽ kết thúc khi hàm close() hoặc destroyed() được gọi.

    open('data.zip', ZipArchive::CREATE || ZipArchive::OVERWRITE)) {
            // Add files with text
        	$zipArchive->addFromString('test.txt', 'www.tinhoc88.com');
    
            // Close ZipArchive
            $zipArchive->close();
        } else {
            printf('Lỗi! mở file.');
            exit;
        }
    ?>

    Kết quả

    Hướng dẫn dùng zip bar trong PHP

    Nén (compress) thư mục trong PHP

    Ngoài nén file thường thì chúng ta rất cần nén thư mục để lưu hành, thực ra việc zip thư mục chỉ là chúng ta code quét tất cả các file trong thư mục và đưa vào file zip, ví dụ code dưới đây sẽ zip 1 thư mục lằm cùng với file thực thi

    open('data.zip', ZipArchive::CREATE || ZipArchive::OVERWRITE)) {
            // get all file
            $directory="thu-muc-can-nen/";
            $files = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($directory),
                RecursiveIteratorIterator::LEAVES_ONLY
            );
    
            foreach ($files as $file) {
                if(fileperms($path)!="16895") {
                    //
                    $zipArchive->addFile($file);
                    $zipArchive->setEncryptionName($file, ZipArchive::EM_AES_256, 'HieuNT');
                }
            }
    
    
            // Close ZipArchive
            $zipArchive->close();
        } else {
            printf('Open file error');
            exit;
        }
    ?>

    Tại đoạn code trên các bạn lưu ý các nội dung sau:

    $directory="thu-muc-can-nen/";

    code này thiết lập thư mục cần nén, lưu ý file thực thi code này lằm cùng thư mục cần nén

    $zipArchive->addFile($file);

    code này sẽ thực hiện thêm từng file vào file zip, lưu ý là tham số $file là đường dẫn của file và phải tồn tại trên hệ thống

    $zipArchive->setEncryptionName($file, ZipArchive::EM_AES_256, 'HieuNT');

    code này là thực hiện thiết lập mật khẩu cho file nén và ở đây mình đang set là 'HieuNT', $file là đường dẫn của file

    và như vậy với đoạn code trên các bạn đã dễ dàng thực hiện nén file dạng .zip kèm theo mật khẩu, nếu các bạn thực hiện mà không hoạt động được có thể liên hệ với chúng tôi để được hỗ trợ.




    Làm sao để thực hiện nén file .zip bằng PHP, bài viết này sẽ giới thiệu và hướng dẫn các bạn thực hiện nén file .zip bằng PHP một cách đơn giản.

    Nội dung chính

    • File nén ZiP là gì?
    • Nén (compress) file trong PHP
    • Nén (compress) thư mục trong PHP
    • 1. Tạo file zip trong php là gì ?
    • 2. Hướng dẫn tạo file zip trong PHP
    • 3. Tổng kết
    Mục lục

      File nén ZiP là gì?

      File có phần mở rộng .zip hiện nay khá phổ biến và hiện nay được hỗ trợ ở hầu hết các hệ điều hành nếu không muốn nói là tất cả.

      File .zip là một dạng file nén dùng giảm dung lượng của một hay nhiều file mà nó chứa bên trong nhằm tối ưu khả năng lưu trữ, di chuyển và truyền tải trên Internet. Sự phổ biến của nó đến mức hiện nay “zip” được xem như một động từ. Ví dụ “Bạn zip file lại rồi gửi cho mình nhé” là một cách nói khá phổ biến cho hành động nén file để giảm dung lượng lưu trữ.

      Ngoài .zip bạn còn có nhiều định dạng khác cũng có chức năng tương tự như .rar , .7z nhưng .zip có lẽ là phổ biến nhất, được sử dụng nhiều nhất và hỗ trợ bởi nhiều hệ điều hành mà không cần cài đặt gì thêm.

      Nén (compress) file trong PHP

      Trong PHP, file .zip có thể tạo hoặc chính sửa thông qua một class được hỗ trợ sẵn là ZipArchive. Quá trình nén và đóng gói file nén sẽ kết thúc khi hàm close() hoặc destroyed() được gọi.

      open('data.zip', ZipArchive::CREATE || ZipArchive::OVERWRITE)) {
              // Add files with text
          	$zipArchive->addFromString('test.txt', 'www.tinhoc88.com');
      
              // Close ZipArchive
              $zipArchive->close();
          } else {
              printf('Lỗi! mở file.');
              exit;
          }
      ?>

      Kết quả

      Nén (compress) thư mục trong PHP

      Ngoài nén file thường thì chúng ta rất cần nén thư mục để lưu hành, thực ra việc zip thư mục chỉ là chúng ta code quét tất cả các file trong thư mục và đưa vào file zip, ví dụ code dưới đây sẽ zip 1 thư mục lằm cùng với file thực thi

      open('data.zip', ZipArchive::CREATE || ZipArchive::OVERWRITE)) {
              // get all file
              $directory="thu-muc-can-nen/";
              $files = new RecursiveIteratorIterator(
                  new RecursiveDirectoryIterator($directory),
                  RecursiveIteratorIterator::LEAVES_ONLY
              );
      
              foreach ($files as $file) {
                  if(fileperms($path)!="16895") {
                      //
                      $zipArchive->addFile($file);
                      $zipArchive->setEncryptionName($file, ZipArchive::EM_AES_256, 'HieuNT');
                  }
              }
      
      
              // Close ZipArchive
              $zipArchive->close();
          } else {
              printf('Open file error');
              exit;
          }
      ?>

      Tại đoạn code trên các bạn lưu ý các nội dung sau:

      $directory="thu-muc-can-nen/";

      code này thiết lập thư mục cần nén, lưu ý file thực thi code này lằm cùng thư mục cần nén

      $zipArchive->addFile($file);

      code này sẽ thực hiện thêm từng file vào file zip, lưu ý là tham số $file là đường dẫn của file và phải tồn tại trên hệ thống

      $zipArchive->setEncryptionName($file, ZipArchive::EM_AES_256, 'HieuNT');

      code này là thực hiện thiết lập mật khẩu cho file nén và ở đây mình đang set là 'HieuNT', $file là đường dẫn của file

      và như vậy với đoạn code trên các bạn đã dễ dàng thực hiện nén file dạng .zip kèm theo mật khẩu, nếu các bạn thực hiện mà không hoạt động được có thể liên hệ với chúng tôi để được hỗ trợ.




      Mục lục

      • 1. Tạo file zip trong php là gì ?
      • 2. Hướng dẫn tạo file zip trong PHP
        • Ví dụ 1 :
        • Ví dụ 2 :
      • 3. Tổng kết

      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 :

      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

      Mình là Hiếu.
      Người sáng lập ra blog Kungfu PHP chia sẻ mọi thứ về tiền điện tử, mmo, lập trình,…
      Một câu nói mà mình rất thích đó là “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 người khiến bạn luôn mỉm cười”.
      Hy vọng nơi đây là góc cafe nhỏ để chúng ta có thể trao đổi, cùng nhau phát triển.

      ►Nếu bạn thấy bài viết bạn đang đọc hữu ích, hãy mời mình một ly cafe nhé : https://kungfuphp.com/donate