Bài viết hôm nay 2Cwebvn xin giới thiệu đến các bạn cách tạo một tập tin Zip bằng PHP. Việc này cũng rất là đơn giản chỉ cần một vài dòng code, tạo ra danh sách các file, nếu file nào được chọn thì nó sẽ đưa vào trong tập tin Zip. Nó rất hữu ích cho các dự án web thương mại điện tử buôn bán các file PDF, hình ảnh và Docs ..v.v, người dùng có thể lựa chọn các tập tin và nó sẽ tải các tập tin đó vào định dạng nén - Zip.
demo download
Phần này mình chỉ cần tạo 1 file chạy chính index.php, 1 folder mang tên /files để chứa các tập tin muốn download và các icon thể hiện loại file download.
Và đây là các file nằm trong folder /files :
Phần HTML mình tạo ra danh sách các thể loại file được chọn như jpg, png, docx và pdf, bạn có thể đưa vào nhiều định dạng file hơn. Trong phần này các bạn chú ý đến giá trị name trong mỗi checkbox, là nó có cùng tên là "files[]", mình sẽ lưu chúng thành 1 mảng. Và phần giá trị value của chúng, các giá trị này phải tồn tại trongfolder /files.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| < center >< h1 >Cách tạo file Zip với PHP - 2Cwebvn</ h1 ></ center > < form name = "zips" method = "post" > < table width = "600" border = "1" align = "center" cellpadding = "10" cellspacing = "0" class = "tbl" > < tbody >< tr > < td width = "33" align = "center" >*</ td > < td width = "117" align = "center" >Kiểu File</ td > < td width = "382" >Tên File</ td > </ tr > < tr > < td align = "center" >< input type = "checkbox" name = "files[]" value = "2cwebvn.pdf" ></ td > < td align = "center" >< img src = "files/pdf.png" title = "pdf" width = "16" height = "16" ></ td > < td >2cwebvn.pdf</ td > </ tr > < tr > < td align = "center" >< input type = "checkbox" name = "files[]" value = "webnguyen.docx" ></ td > < td align = "center" >< img src = "files/doc.png" title = "Document" width = "16" height = "16" ></ td > < td >webnguyen.docx</ td > </ tr > < tr > < td align = "center" >< input type = "checkbox" name = "files[]" value = "hoang-hon.jpg" ></ td > < td align = "center" >< img src = "files/image.png" title = "Image" width = "16" height = "16" ></ td > < td >hoang-hon.jpg</ td > </ tr > < tr > < td align = "center" >< input type = "checkbox" name = "files[]" value = "dong-vat.png" ></ td > < td align = "center" >< img src = "files/image.png" title = "Image" width = "16" height = "16" ></ td > < td >dong-vat.png</ td > </ tr > < tr > < td colspan = "3" align = "center" > < input type = "submit" name = "createpdf" class = "btcreate" value = "Tải file ZIP" > < input type = "reset" name = "reset" class = "btreset" value = "Unchecked" > </ td > </ tr > </ tbody ></ table > </ form > |
Thêm một chút CSS định dạng cho dễ nhìn nhé:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| *{ margin : 0px ; padding : 0px ;} body { background : url (bg_ 2 cwebvn.png);} h 1 { margin : 50px 0px 30px ; color : #DB2E66 ;} p.error{ border : #C10000 1px solid ; background-color : #FFA8A8 ; color : #B00000 ; padding : 8px ; width : 588px ; margin : 0 auto 10px ; } table.tbl{ border-collapse : collapse ; border : #ccc 1px solid ; } input.btcreate, input.btreset{ border : 0px ; background-color : #DB2E66 ; color : #FFF ; padding : 10px ; cursor : pointer ; font-weight : bold ; border-radius: 5px ; } input.btreset{ background-color : #D3D3D3 ; color : #000 ; } |
Giờ chúng ta cùng xem kết quả của phần này nhé.
Phần code php này mình sẽ viết ở trên đầu của file index.php nhé. Trong phần code này mình đã chú thích hết cho các bạn rồi, cũng dễ hiểu thôi, nếu có thắc mắc gì các bạn cứ comment bên dưới nhé, mình sẽ cố gắng trả lời.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| //Nếu có error thì sẽ bỏ vào biến error này $error = "" ; if (isset( $_POST [ 'createpdf' ])){ $post = $_POST ; $file_folder = "files/" ; // Thư mục để tải file lên file zip if ( extension_loaded ( 'zip' )){ // Kiểm tra phần mở rộng zip // Kiểm tra file được check và số lượng được check phải lớn hơn 0 if (isset( $post [ 'files' ]) and count ( $post [ 'files' ]) > 0){ $zip = new ZipArchive(); // Load thư viện Zip $zip_name = '2cwebvn_' . time(). ".zip" ; // Tên file zip if ( $zip ->open( $zip_name , ZIPARCHIVE::CREATE)!==TRUE){ // Mở file zip để load các file vào $error .= "* Tạo file zip không thành công trong thời điểm này, i'm sorry.!" ; } // Duyệt qua các file được checked và add vào file zip foreach ( $post [ 'files' ] as $file ){ $zip ->addFile( $file_folder . $file ); } $zip ->close(); // Đóng file zip lại // Kiểm tra file tồn tại thì tải file zip vế máy if ( file_exists ( $zip_name )){ header( 'Content-type: application/zip' ); header( 'Content-Disposition: attachment; filename="' . $zip_name . '"' ); readfile( $zip_name ); unlink( $zip_name ); // Xóa file zip được lưu trong đường dẫn tạm } } else $error .= "* Xin bạn hãy chọn file cần zip. " ; } else $error .= "* Bạn không có phần mở rộng zip." ; } |
Và nhớ thêm 1 phần báo lỗi nữa ở sau thẻ form, trước thẻ table nhé, đơn giản chỉ hiện thông báo lỗi thôi:
1
2
3
| if (! empty ( $error )) { echo '<p class="error">' . $error . '</p><p> </p>' ; } |
Vậy là xong, giờ mình cùng xem màn hình kết quả nào.
Bạn có thích bài hướng dẫn này không? Nếu có hãy giúp mình like bài viết này nhé hoặc bạn có thể chia sẽ bài này đến những người mà bạn nghĩ họ quan tâm, xin cảm ơn!
Mọi ý kiến thắc mắc hay đóng góp xin gởi về cho chúng tôi bằng form bình luận bên dưới, xin chúc các bạn thành công!
Bạn có giải pháp nào zip file với dung lượng lớn không?
Trả lờiXóa