Bagaimana cara membuat ZIP file dengan PHP?

Membuat file zip dengan PHP sebenarnya sangat mudah karena PHP sendiri sudah memiliki class yang bernama ZipArchive. Nah pada tutorial kali ini kita akan membahas beberapa kemungkinan kasus dalam membuat file zip dalam projek kamu nanti.

1. Membuat file zip dari file

Kode dibawah ini adalah contoh membuat sebuah file dengan nama new.zip.

<?php 
$zip = new ZipArchive;
if ($zip->open('new.zip', ZipArchive::CREATE) === TRUE) {
     // point 1     
     $zip->addFile('file1.txt');     
     $zip->addFile('file2.pdf');       
     // point 2     
     $zip->addFile('file3.txt', 'oldfile.txt');       
     // point 3     
     $zip->addFromString('new.txt', 'text to be added to the new.txt file');       
     // point 4     
     $zip->close();  
 }

Penjelasannya:

  • line 2 kita membuat sebuah instant baru dari class ZipAchive dengan nama $zip
  • line 3 kita membuat sebuah zip file dengan nama new.zip dan jika berhasil maka kita bisa lanjut untuk mengisinya dengan file yang kita inginkan.
  • point 1: kita memasukkan file1.txt ke dalam file zip. Artinya file file1.txt sudah ada di dalam directory
  • point 2: kita akan memasukkan file dengan nama oldfile.txt yang ada di folder tapi kita akan merubahnya menjadi file2.txt di dalam zip.
  • point 3: fungsi addFromString berfungsi untuk membuat sebuah file dari string. Jadi file new.txt tidak ada di dalam folder kita tapi kita akan buat dari string.
  • poin 4: fungsi close() untuk menutup dan menyimpan perubahan yang kita buat di file new.zip

Note: hati-hati dengan path file yang mau kamu tambahkan. Dalam contoh di atas, semua file berada di dalam folder.

2. Overwrite file zip yang sudah ada

Jika kita ingin mengoverwrite file zip yang sudah ada seperti file new.zip maka kita hanya perlu manambahkan variable ZipArchive::OVERWRITE

<?php 
$zip = new ZipArchive; 
if ($zip->open('new.zip', ZipArchive::OVERWRITE) === TRUE) {     
	//poin 1
	$zip->addFile('file1.txt','newfile.txt');
        //point 2     
	$zip->addFile('file2.pdf');
        // All files are added, so close the zip file.     
	$zip->close(); 
}

Penjelasannya:

  • Point 1: kita akan merewrite file1.txt dengan newfile.txt
  • point 2: file2.pdf yang sudah ada di zip sebelumnya akan ditumpuk oleh file2.pdf yang baru

3. Membuat file zip tapi memodifikasi isi folder di dalam zip tersebut.

Selanjutnya kita akan membuat folder-folder dalam file zip yang akan kita buat.

<?php 
$zip = new ZipArchive; 
if ($zip->open('new.zip', ZipArchive::CREATE) === TRUE) {
	//poin 1     
	$zip->addFile('text.txt', 'demo_folder/test.txt');     
	$zip->addFile('test.pdf', 'demo_folder/test.pdf');       
	//poin 2     
	$zip->addFile('random.txt', 'demo_folder/newfile.txt');
	//poin 3     
	$zip->addFromString('demo_folder/new.txt', 'text to be added to the new.txt file');      
        // All files are added, so close the zip file.    
	$zip->close();
}

Penjelasannya:

  • poin 1: kita akan membuat file text.txt tapi mengambil file yang ada di folder demo_folder/text.txt
  • poin 2: seperti dari poin 1, file newfile.txt yang ada di demo_folder akan kita simpan tanpa folder dan namanya dirubah menjadi random.txt
  • poin 3: kita akan membuat sebuah file di dalam folder demo_folder di dalam zip

4. Membuat zip dari sebuah folder

Untuk membuat file dari sebuah folder kita perlu mengambil semua file yang ada di dalam folder tersebut dengan bantuan fungsi opendir, lalu memasukkan satu-persatu filenya ke dalam file zip.

<?php 
$zip = new ZipArchive;
if ($zip->open('new.zip', ZipArchive::OVERWRITE) === TRUE) {
  	//point 1
	if ($handle = opendir('demo_folder'))     
  	              // point 2
		while (false !== ($entry = readdir($handle))) 
		{
  	                                	//point 3             
			if ($entry != "." && $entry != ".." && !is_dir('demo_folder/' . $entry))
			{
				//point 4  
				$zip->addFile('demo_folder/' . $entry);             
			} 
		}
		closedir($handle);
 
 
	}
	$zip->close(); 
} 

Penjelasan:

  • poin 1: kita memakai fungsi opendir untuk membuka file demo_folder
  • poin 2: kita looping untuk mendapatkan semua filename yang ada di dalam folder tersebut
  • poin 3: skip untuk ., .., dan folder di dalam demo_folder
  • poin 4: menambahkan file ke dalam zip

Note: hati-hati jika masih ada folder di dalam folder demo_folder, karena proses zip akan error. jadi kamu bisa melakukan checking lagi jika ada folder maka lakukan looping lagi.

5. Membuat zip dari gabungan beberapa file dan folder sekaligus

Dari contoh di atas, kita akan coba gabungkan jadi kita bisa membuat sebuah zip file yang berisi file dari beberapa folder dan file sekaligus.

<?php
$zip = new ZipArchive;
if ($zip->open('test_files_dirs.zip', ZipArchive::OVERWRITE) === TRUE) 
{
	// Add directory1     
	if ($handle = opendir('demo_folder/directory1/'))
	{
		while (false !== ($entry = readdir($handle)))
		{             
			if ($entry != "." && $entry != "..")
			{                 
				$zip->addFile('demo_folder/directory1/' . $entry);
 
 
			}
		}
		closedir($handle);
	}
	// Add directory2
	if ($handle = opendir('demo_folder/directory2/'))     
	{
		while (false !== ($entry = readdir($handle)))
		{
			if ($entry != "." && $entry != "..")            
			{
				$zip->addFile('demo_folder/directory2/' . $entry);
			}        
 
 
		}
		closedir($handle);  
	}    
	// Add directory3     
	if ($handle = opendir('demo_folder/directory3/'))     
	{
		while (false !== ($entry = readdir($handle)))  
		{ 
			if ($entry != "." && $entry != "..")  
			{
				$zip->addFile('demo_folder/directory3/' . $entry);  
			}
		}
		closedir($handle);
	}
            // Add more files
	$zip->addFile('demo_folder/index.txt');      
	$zip->close();  
}

Selanjutnya?

Sepertinya akan lebih gampang jika kita memiliki sebuah fungsi yang bisa mempermudah proses pembuatan zip. Jadi kita bisa memasukkan nama folder atau file kemudian nama zip yang di inginkan kemudian file zip kita sudah selesai dibuat. Jadi contohnya seperti di bawah ini:

<?php 
/* creates a compressed zip file */ 
function create_zip($files = array(),$destination = '',$overwrite = false) 
{
 	//if the zip file already exists and overwrite is false, return false 	
	if(file_exists($destination) && !$overwrite) { return false; } 	
 	//vars 	$valid_files = array(); 	 	
 	//if files were passed in... 	
	if(is_array($files)) {
 	 	//cycle through each file 		
		foreach($files as $file) 
		{
			//make sure the file exists
			if(file_exists($file)) { 
				$valid_files[] = $file; 
			} 	
		} 	
	}elseif(is_dir($files)){ 		
		if ($handle = opendir($files)) 	    
		{
			while (false !== ($entry = readdir($handle))) 	        
			{
				if ($entry != "." && $entry != ".." && !is_dir($files.'/' . $entry)) 	
				{ 	            	
					$valid_files[] = $files.'/' . $entry;
				}
			}
			closedir($handle); 	    
		}
	} 
	//if we have good files...
	if(count($valid_files)) { 
		//create the archive
		$zip = new ZipArchive(); 
		if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
			return false; 		
		} 
		//add the files
		foreach($valid_files as $file) { 		
			$zip->addFile($file,$file); 		
		} 		 		
		//close the zip -- done!
		$zip->close();
		//check to make sure the file exists
		return file_exists($destination);
	}
	else
	{
		return false;
	}
}

Kita punya sebuah fungsi dengan nama create_zip yang memiliki parameter berupa:

  1. Nama file atau folder atau bisa memasukkan list file berupa array
  2. Destinasi atau nama zip file yang akan kita buat
  3. Terakhir adalah overwrite status, jika trus maka zip file akan di overwrite.

Cara memakai fungsi di atas akan kita jelaskan di bawah ini:

<?php 
$files_to_zip = array(
	'new.txt',
	'new2.txt',
	'new3.txt',
	);
//if true, good; if false, zip creation failed 
$result = create_zip($files_to_zip,'my-archive.zip');  
 
$folder_name = 'testing';
//if true, good; if false, zip creation failed
$result = create_zip($folder_name,'my-archive2.zip',TRUE);

Penjelasan:

Contoh pertama kita membuat zip file dari list file yang ada di dalam array $files_to_zip, kemudian di contoh kedua kita membuat zip dari sebuah folder yang bernama testing dengan overwrite status trus. Jadi jika sebelumnya sudah ada file my-archive2.zip maka akan di overwrite.

Jadi itu sedikit banyak tentang bagaimana cara membuat zip dengan PHP. Kamu mencobanya sekarang dan memodif semua contoh di atas sesuai dengan kebutuhan kamu.

Please follow and like us:

Hi, Saya Agus Yusida

Hello, perkenalkan saya Agus Yusida, seorang freelancer programmer, pernah membuat startup dan suka mencoba hal-hal baru. Jika ada pertanyaan bisa DM saya di IG @yusidajohn untuk fast respond. Jangan lupa like facebook ngide.net ya!

Related Article