Cara menggunakan php zip files

Dengan PHP, kita bisa membuat aplikasi sederhana untuk kompresi file ke dalam bentuk ZIP.

Mengapa kita harus bisa membuat script untuk kompresi file ini, toh di hampir setiap komputer sudah ada software kompresi, meskipun hasil crack-crack an :-). Untuk menjawab ini, saya ambil contoh penerapannya. Kalau Anda merupakan adsense publisher, maka setiap interval waktu tertentu Anda akan dikirimi file report earning dalam format CSV yang terkompresi dalam bentuk ZIP file. Apakah setiap pegawai Google Adsense melakukan kompresi setiap laporannya dan mengirimkan satu-persatu file report ini ke semua publishernya secara manual via email? Saya yakin tidak… Mekanisme ini dibuat secara otomatis dengan menggunakan program atau script. Nah… ini salah satu contoh saja alasan mengapa kita juga harus bisa membuat aplikasi untuk kompresi file ZIP via web.

Alasan yang lain… misalkan Anda orang yang ‘baik’ dan tidak ingin menggunakan software crack-crack an untuk kompresi, maka Anda bisa membuat sendiri aplikasinya dengan PHP 🙂

Pada tutorial ini akan dibahas bagaimana cara membuat script PHP untuk melakukan kompresi file ZIP. Skenario untuk studi kasus yang diambil di sini adalah: user nantinya akan memilih file yang akan dikompresi melalui form, setelah itu ia mengklik tombol submit, dan hasilnya akan diperoleh file kompresi ZIP dari file yang dipilih tadi. Simple bukan…

Oya… untuk PHP yang dijalankan di Windows OS, pastikan Anda telah mengaktifkan php_zip.dll di file php.ini. Bagaimana caranya? Caranya adalah buka terlebih dahulu file php.ini, bila Anda menggunakan AppServ caranya klik START > AppServ > Configuration Server > PHP Edit The php.ini Configuration File. Selanjutnya cari baris extension=php_zip.dll. Pastikan tidak ada tanda titik koma (;) di depan baris tersebut. Bila sudah, simpan kembali php.ini, dan restart Apache (Web Server).

Nah… sekarang kita mulai membuatnya.

Pertama-tama kita buat form untuk memilih file yang akan dikompresi.

<form enctype="multipart/form-data" action="kompresi.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
Pilih file yang akan dikompresi <input name="file" type="file" />
<input type="submit" name="submit" value="Submit" />
</form>

Selanjutnya kita buat script kompresi.php nya.

<?php

$namaFile = $_FILES['file']['name'];     
$tmpName  = $_FILES['file']['tmp_name'];

$fp      = fopen($tmpName, 'r');
$isiFile = fread($fp, filesize($tmpName));
fclose($fp);

$zip = new ZipArchive();
$fileKompresi = $namaFile.".zip";

$kompresi = $zip->open($fileKompresi, ZIPARCHIVE::CREATE);
if ($kompresi)
{
   $zip->addFromString($namaFile, $isiFile);
   $zip->close();
   echo "Kompresi Sukses";
}
else echo "Kompresi Gagal";
?>

Keterangan:

  • Baris ke-3 digunakan untuk mendapatkan nama file yang akan dikompresi. Nama file ini nanti akan digunakan untuk memberi nama file hasil kompresi (lihat baris ke-11).
  • Baris ke-4 digunakan untuk menyimpan temporary file yang akan dikompresi. File temporary ini nantinya akan dibaca isinya (baris ke-6 s/d 8).
  • Baris ke-10 digunakan untuk membuat obyek ZipArchive.
  • Baris ke-13 digunakan untuk membuat file kompresi.
  • Baris ke-14 melakukan pengecekan, bila file kompresi berhasil dibuat maka isi file asli yang dibaca akan dimasukkan ke dalam file kompresi. Sedangkan bila gagal, muncul pesan kegagalan.

Dari contoh ini, Anda bisa kembangkan sendiri bagaimana jika kita ingin mengkompresi beberapa file menjadi satu.

OK… mudah-mudahan info bermanfaat.

Bagikan artikel ini jika bermanfaat !


Example #1 Create a Zip archive

<?php

$zip

= new ZipArchive();
$filename "./test112.zip";

if (

$zip->open($filenameZipArchive::CREATE)!==TRUE) {
    exit(
"cannot open <$filename>\n");
}
$zip->addFromString("testfilephp.txt" time(), "#1 This is a test string added as testfilephp.txt.\n");
$zip->addFromString("testfilephp2.txt" time(), "#2 This is a test string added as testfilephp2.txt.\n");
$zip->addFile($thisdir "/too.php","/testfromfile.php");
echo 
"numfiles: " $zip->numFiles "\n";
echo 
"status:" $zip->status "\n";
$zip->close();
?>

Example #2 Dump the archive details and listing

<?php
$za 
= new ZipArchive();$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo 
"numFiles: " $za->numFiles "\n";
echo 
"status: " $za->status  "\n";
echo 
"statusSys: " $za->statusSys "\n";
echo 
"filename: " $za->filename "\n";
echo 
"comment: " $za->comment "\n";

for (

$i=0$i<$za->numFiles;$i++) {
    echo 
"index: $i\n";
    
print_r($za->statIndex($i));
}
echo 
"numFile:" $za->numFiles "\n";
?>

Example #3 Zip stream wrapper, read an OpenOffice meta info

<?php
$reader 
= new XMLReader();$reader->open('zip://' dirname(__FILE__) . '/test.odt#meta.xml');
$odt_meta = array();
while (
$reader->read()) {
    if (
$reader->nodeType == XMLREADER::ELEMENT) {
        
$elm $reader->name;
    } else {
        if (
$reader->nodeType == XMLREADER::END_ELEMENT && $reader->name == 'office:meta') {
            break;
        }
        if (!
trim($reader->value)) {
            continue;
        }
        
$odt_meta[$elm] = $reader->value;
    }
}
print_r($odt_meta);
?>

This example uses the old API (PHP 4), it opens a ZIP file archive, reads each file in the archive and prints out its contents. The test2.zip archive used in this example is one of the test archives in the ZZIPlib source distribution.

Example #4 Zip Usage Example

<?php

$zip

zip_open("/tmp/test2.zip");

if (

$zip) {
    while (
$zip_entry zip_read($zip)) {
        echo 
"Name:               " zip_entry_name($zip_entry) . "\n";
        echo 
"Actual Filesize:    " zip_entry_filesize($zip_entry) . "\n";
        echo 
"Compressed Size:    " zip_entry_compressedsize($zip_entry) . "\n";
        echo 
"Compression Method: " zip_entry_compressionmethod($zip_entry) . "\n";

        if (

zip_entry_open($zip$zip_entry"r")) {
            echo 
"File Contents:\n";
            
$buf zip_entry_read($zip_entryzip_entry_filesize($zip_entry));
            echo 
"$buf\n";zip_entry_close($zip_entry);
        }
        echo 
"\n";

    }

zip_close($zip);

}

?>

info at peterhofer dot ch

14 years ago

All these examples will not work if the php script has no write access within the folder.

Although you may say this is obvious, I found that in this case, $zip->open("name", ZIPARCHIVE::CREATE) doesn't return an error as it might not try to access the file system but rather allocates memory.

It is only $zip->close() that returns the error. This might cause you seeking at the wrong end.

webmaster @ anonymous

9 years ago

you can use this code for reading JAR files (java archives)

JAR files use the same ZIP format, so can be easily read

$zf = zip_open(realpath('D:/lucene/allinone/lucene-core.jar')); $i=1;
while($zf && $ze = zip_read($zf)) {
    $zi[$i]['zip entry name']= zip_entry_name($ze);
    $zi[$i]['zip entry filesize']= zip_entry_filesize($ze);
    $zi[$i]['zip entry compressed size']= zip_entry_compressedsize($ze);
    $zi[$i]['zip entry compression method']= zip_entry_compressionmethod($ze);
    $zi[$i]['zip entry open status'] = zip_entry_open($zf,$ze);
    //$zi[$i]['zip entry file contents'] = zip_entry_read($ze,100);
    $i++;
}
print_r($zi);
zip_close($zf);

geandjay at gmail dot com

14 years ago

<?php
        $zip
= new ZipArchive;
   
$zip->open('teste.zip');
   
$zip->extractTo('./');
   
$zip->close();
        echo
"Ok!";
?>

Stefano Di Paolo

14 years ago

1) If you want to add files to a ZIP archive but you don't know if the ZiP file exists or not, you MUST check: this changes the way you open it !.
2) you can not append multiple flags, can use only one (or none).

If the zip does not exists, open it with:
$ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE)
(or a different compression method)

If the zip already exists, open it with:
$ziph->open($archiveFile)
or
$ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS)

Example: make backup files every hour and ZIP them all in a daily ZIP archive, so you want to get only one ZIP per day, each ZIP containing 24 files:
<?php
 
function archivebackup($archiveFile, $file, &$errMsg)
  {
   
$ziph = new ZipArchive();
    if(
file_exists($archiveFile))
    {
      if(
$ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
      {
       
$errMsg = "Unable to Open $archiveFile";
        return
1;
      }
    }
    else
    {
      if(
$ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE) !== TRUE)
      {
       
$errMsg = "Could not Create $archiveFile";
        return
1;
      }
    }
    if(!
$ziph->addFile($file))
    {
     
$errMsg = "error archiving $file in $archiveFile";
      return
2;
    }
   
$ziph->close();

        return

0;
  }
?>

Jonathan

12 years ago

If you find your zip file not being created make sure every file you are adding to the zip is valid.  If even one file is not available when zip->close is called then the archive will fail and your zip file won't be created.

Bagaimana cara menggunakan zip?

Untuk zip (memadatkan) file atau folder.
Temukan file atau folder yang ingin Anda zip..
Tekan dan tahan (atau klik kanan) file atau folder, pilih (atau arahkan ke) kirim ke, lalu pilih folder terkompresi (zip). Folder Zip baru dengan nama yang sama dibuat di lokasi yang sama..

File zip buka pakai apa?

Cara membuka file ZIP di Android Di perangkat Android kamu, buka Files by Google. Di bagian bawah, ketuk Cari. Buka folder yang berisi file . zip yang ingin diekstrak, lalu pilih file .

Apa itu compressed zip file?

Seputar Kompresi Data ZIP Melansir dari laman dropbox.com, ZIP adalah format file arsip yang digunakan secara luas untuk mengompres atau memampatkan satu atau beberapa berkas (file) bersama-sama. Berkas yang dikompresi akan menjadi tergabung dalam satu lokasi, sehingga akan mengurangi ukurannya secara keseluruhan.