Web Programming 20 May 2021 275 views 0 komentar

Zip folder dengan menggunakan PHP

Zip folder dengan menggunakan PHP

Adakalanya kita membutuhkan script untuk mendowload beberapa file menjadi satu file zip untuk mempermudah dalam melakukan download pada halaman website.

Berikut cara membuat script untuk proses pengabungan file menjadi satu file zip :

<?php</code><br /><code class="language-php">$directory = "Directory_Name";</code><br /><code class="language-php">$zip_file_name = "Nama_File.zip";</code><br /><code class="language-php">$download_file = true;</code><br /><br /><code class="language-php">class FlxZipArchive extends ZipArchive {</code><br /><code class="language-php">    /** Add a Dir with Files and Subdirs to the archive;;;;; @param string $location Real Location;;;;  @param string $name Name in Archive;;; @author Nicolas Heimann;;;; @access private  **/</code><br /><br /><code class="language-php">    public function addDir($location, $name) {</code><br /><code class="language-php">        $this->addEmptyDir($name);</code><br /><code class="language-php">        $this->addDirDo($location, $name);</code><br /><code class="language-php">     } // EO addDir;</code><br /><br /><br /><code class="language-php">    /**  Add Files & Dirs to archive;;;; @param string $location Real Location;  @param string $name Name in Archive;;;;;; @author Nicolas Heimann</code><br /><code class="language-php">     * @access private   **/</code><br /><code class="language-php">    private function addDirDo($location, $name) {</code><br /><code class="language-php">        $name .= '/';</code><br /><code class="language-php">        $location .= '/';</code><br /><br /><code class="language-php">        // Read all Files in Dir</code><br /><code class="language-php">        $dir = opendir ($location);</code><br /><code class="language-php">        while ($file = readdir($dir))</code><br /><code class="language-php">        {</code><br /><code class="language-php">            if ($file == '.' || $file == '..') continue;</code><br /><code class="language-php">            // Rekursiv, If dir: FlxZipArchive::addDir(), else ::File();</code><br /><code class="language-php">            $do = (filetype( $location . $file) == 'dir') ? 'addDir' : 'addFile';</code><br /><code class="language-php">            $this->$do($location . $file, $name . $file);</code><br /><code class="language-php">        }</code><br /><code class="language-php">    } // EO addDirDo();</code><br /><code class="language-php">}</code><br /><br /><code class="language-php">$zip_achive = new FlxZipArchive;</code><br /><code class="language-php">$$zip_achive_open = $zip_achive->open($zip_file_name, ZipArchive::CREATE);</code><br /><code class="language-php">if($$zip_achive_open === TRUE)</code><br /><code class="language-php">{</code><br /><code class="language-php">    $zip_achive->addDir($directory, basename($directory));</code><br /><code class="language-php">    $zip_achive->close();</code><br /><code class="language-php">} else  { </code><br /><code class="language-php">    $download_file = false;</code><br /><code class="language-php">    echo 'Could not
create a zip archive';</code><br /><code class="language-php">}</code><br /><br /><code class="language-php">if ($download_file)</code><br /><code class="language-php">{</code><br /><code class="language-php">    ob_get_clean();</code><br /><code class="language-php">    header("Pragma: public");</code><br /><code class="language-php">    header("Expires: 0");</code><br /><code class="language-php">    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");</code><br /><code class="language-php">    header("Cache-Control: private", false);</code><br /><code class="language-php">    header("Content-Type: application/zip");</code><br /><code class="language-php">    header("Content-Disposition: attachment; filename=" . basename($zip_file_name) . ";" );</code><br /><code class="language-php">    header("Content-Transfer-Encoding: binary");</code><br /><code class="language-php">    header("Content-Length: " . filesize($zip_file_name));</code><br /><code class="language-php">    readfile($zip_file_name);</code><br /><code class="language-php">    unlink($zip_file_name);</code><br /><code class="language-php">}</code><br /><br /><code class="language-php">?>

 

Selamat mencoba, terima kasih

Apa itu ZipArchive?

Kompresi folder menjadi format ZIP sangat berguna untuk:

  • Backup data - Mengkompres folder sebelum diunduh atau dikirim
  • Distribusi file - Mengirim banyak file dalam satu paket
  • Penyimpanan - Menghemat ruang disk

Metode 1: Zip Seluruh Folder

<?php
$zip = new ZipArchive();
$filename = 'backup_' . date('Y-m-d') . '.zip';

if ($zip->open($filename, ZipArchive::CREATE) === TRUE) {
    $folder = 'path/to/folder';
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($folder),
        RecursiveIteratorIterator::LEAVES_ONLY
    );
    
    foreach ($files as $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($folder) + 1);
            $zip->addFile($filePath, $relativePath);
        }
    }
    
    $zip->close();
    echo "Zip berhasil: $filename";
} else {
    echo "Gagal membuat zip";
}
?>

Tips dan Best Practices

  • Password protection - Gunakan opsi enkripsi untuk file sensitif
  • Progress tracking - Untuk folder besar, tampilkan progress ke user
  • Error handling - Tangani file yang locked atau permission denied
  • Kompresi level - Sesuaikan level kompresi antara ukuran dan kecepatan
Tags Artikel: #Zipfile

Bagikan artikel ini:

Komentar (0)

Belum ada komentar. Jadilah yang pertama memberikan tanggapan!

Tinggalkan Komentar