Hướng dẫn dùng ziparchive 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.

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 ziparchive 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ợ.