Hướng dẫn php winrar

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.

    <?php $zipArchive = new ZipArchive[]; // open and create zip file filename data.zip if [$zipArchive->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

    <?php // Init ZipArchive $zipArchive = new ZipArchive[]; // open and create zip file if [$zipArchive->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ợ.


    Trong bài viết này, chúng ta sẽ trình bày các sử dụng PHP để tạo các file nén .zip dựa vào các file mình có, sau đó cho phép người dùng download file .zip này về máy tính của mình.

    • File nén ZUP là gì ?
    • Nén (compress) file trong PHP
    • Tạo công cụ Zip file bằng PHP

    File nén ZUP 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ụ “mày zip file lại rồi hãy gửi cho tao 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 mình thấy .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 như đã nói ở trên.

    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.

    <?php
    //object of ZipArchive class is created 
    $myzip = new ZipArchive;
     
    //New zip file is created and ready to add files in it
    if ($myzip->open('new_zipfile.zip', ZipArchive::CREATE) === TRUE)
    {
        // Add files to the zip file
        $myzip->addFile('boy.png');
        $myzip->addFile('gray.jpeg');
     
        // Add old.txt file to zip and rename it to newfile.txt
        $myzip->addFile('old.txt', 'new.txt');
     
        // Add a file write.txt file to zip using the text specified
        $myzip->addFromString('write.txt', 'text will be added to the write.txt file');
     
        // closing the zip file.
        $myzip->close();
    }
    ?>

    Kết quả:

    Hướng dẫn php winrar

    Create Zip File In PHP

    Với kiến thức nền ở trên, bạn có thể xây dựng một công cụ giúp người dùng nén file bằng cách lựa chọn những file cần nén, tiếp theo là nén những file họ đã chọn thành một gói duy nhất có phần mở rộng là .zip sau đó tải về.

    Đây là mã cho bạn:

    <html>
    <head>
    <style>
    body {
    	padding: 5px 500px;
    	font-size: 13px;
        background-color: deepskyblue;
    	font-family:serif;
    }
    h2 {
    	margin-bottom: 20px;
    	font-family: fantasy;
        font-size: 40px;
    }
    h3{
    	color:green;
    }
    .container,.container2{
    	padding: 10px;
    	border: 3px solid black;
    	width: 250px;
    	color: black;
    	box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 8px;
    }
    input{
    	padding: 15px;
    }
    input[type=submit]{
    	width: 100px; 
    	height: 50px;
    	background-color: #474E69; 
    	color: #FFF;
    	border-radius: 5px;
    }
    input[type=checkbox] {
    font-size:20px;	
    }
    input[type=file]{
        display: block;
        width: auto;
        font-size: 11px;
        margin-top: 30px;
        border: 3px solid black;
        display: block;
        margin-bottom: 5px;
    }
    </style>
    </head>
    <body>
    <h2>Upload Files To Create Zip</h2>
    <div class="container">
    <form method="POST" action="" enctype="multipart/form-data">
    <input type="file" name="userfile[]" multiple />
    <input type="submit" name="sub" value="UPLOAD" >
    </form>
    </div>
    </body>
    </html>
    <?php
    function reArrayFiles($file_post)
    {
    	$file_ary=array();
    	$file_count=count($file_post['name']);
    	$file_keys=array_keys($file_post);
    	for($i=0;$i<$file_count;$i++)
    	{
    		foreach($file_keys as $keys)
    		{
    			$file_ary[$i][$keys]=$file_post[$keys][$i];
    		}
    	}
    	return $file_ary;
    }
    if(isset($_POST['sub']))
    {
    $file_array=reArrayFiles($_FILES['userfile']);
    echo"<h2>Select file to zip</h2>
    	<div class='container2'>";
    echo'<form action="" method="POST">';
    for($i=0;$i<count($file_array);$i++)
    {
    $extensions=array('jpg','img','png','jpeg','docx','xsl','txt','pdf','exe','doc','csv');
    $file_ext=explode('.',$file_array[$i]['name']);
    $file_ext=end($file_ext);
    if(in_array($file_ext,$extensions))
    {
    	move_uploaded_file($file_array[$i]['tmp_name'],"".$file_array[$i]['name']);
    	echo'<input type="checkbox" name="zip_list[]" value="'.$file_array[$i]['name'].'"><label>'.$file_array[$i]['name'].'</label><br>';
    }
    else
    	echo "can't upload the file";
    }
    echo'<input type="submit" name="zip" value="CREATE" >
    </form></div>';
    } 
    ?>
    <?php
    if(isset($_POST['zip']))
    {
    	$zip = new ZipArchive;
    	if ($zip->open('newzip.zip', ZipArchive::CREATE) === TRUE)
    	{
    		if(!empty($_POST['zip_list']))
    		{
    			foreach($_POST['zip_list'] as $selected)
    			{
    			$zip->addFile($selected);
    			}
    			echo"<h3>Selected files are successfully zipped</h3>";
    		}
    		else
    		{
    			echo"Select atleast one";
    		}
    	$zip->close();
    	}
    }
    ?>

    Đoạn mã hoạt động theo quy trình sau:

    1. Người dùng lựa chọn file từ máy tính của họ
    2. Hệ thống upload file đã lựa chọn lên máy chủ PHP của bạn.
    3. Người dùng lựa chọn lại lần nữa những file nào cần nén
    4. Tiến hành nén file và trả về file download cho người dùng

    Điểm quan trọng là bạn cần phải upload dữ liệu lên máy chủ.