Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. News
Code

Bagaimana Membuka File Zip dengan PHP

by
Length:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Anthoni Hermanto (you can also view the original English article)

ThemeForest memiliki fitur yang bagus; yaitu memperbolehkan penulis untuk mengupload file zip yang terdiri dari screenshot dari temanya. Script tersebut kemudian diekstrak dan menunjukkan gambar yang sesuai. Walaupun saya ragu kalau developer menggunakan PHP untuk menyelesaikan tugas ini...itulah apa yang akan kita gunakan!


Apa yang Harus Kita Lakukan

  • Buat form upload simple yang membolehkan pengguna untuk memilih file zip.
  • Pastikan kalau pengguna memilih file zip, dan kemudian simpan sebagai file unik.
  • Ekstrak konten dari file zip dan simpan ke dalam folder spesifik.
  • Hapus file zip dan kemudian echo kontennya.

Langkah 1: Membuat Form Upload

Upload Form
  • Buat file baru dan simpan sebagai index.html pada root dari solusi Anda.
  • Berikutnya, kita akan membuat form simple. Paste berikut ini ke dalam.

Jika Anda akan mengizinkan pengguna untuk mengupload file, anda harus men set "enctype" dari tag form menjadi "multipart/form-data". Kemudian kita akan men set action ke halaman yang sama dan method ke post.

Form HTML

Untuk menjaga semua agar tetap seramping mungkin, kita hanya perlu file input dan tombol submit. Catatan jika kita telah mengatur nama file input menjadi "fupload". Kita akan sesegera mungkin menggunakan nilai ini untuk menentukan halaman telah melakukan post kembali.

Langkah 2: Menulis PHP

Pada bagian paling atas dari halaman index.php Anda, sebelum doctype telah dideklarasikan, tempelkan berikut ke dalam:

Mari ambil selangkah demi selangkah.

  • Jika tag input dengan nama "fupload" telah diatur, maka jalankan kode berikut, selain itu, jangan lakukan apapun.
  • Sekarang kita perlu membuat sedikit variabel. Kita perlu mengambil nama dari file yang diunggah, direktori di mana file disimpan sementara, dan jenis file yang dipilih.

Mari asumsikan bahwa pengguna memilih file yang disebut "myPics.zip".

  • $_FILES['fupload']['name'] = "myPics.zip"
  • $_FILES['fupload']['tmp_name'] = direkotri sementara pada server.
  • $_FILES['fupload']['type'] = "application/zip". (Nilai ini dapat berubah tergantung dari browser mana file diupload)
Contents of the FILES global array

Berikutnya, mari bagi nama file menjadi dua: namanya, dan ekstensinya.

Lanjutkan dengan contoh kita file "myPics.zip" - $name[0] akan sama dengan "myPics". $name[1] akan sama dengan "zip".

Berikutnya, kita akan membuat variabel baru yang disebut "$target". Ini akan menjadi lokasi tempat file kita akan disimpan. Untuk memastikan kalau pengguna lain dengan nama "myPics" yang sama tidak tertimpa, maka kita harus memastikan kalau kita menyimpan file ke dalam lokasi yang unik. Untuk menyelesaikan tugas, kita akan mengimplementasikan fungsi "time()". Jika kita membubuhkan nilai ini kedalam nama file yang telah diupload, kita dapat yakin kalau kita akan berakhir dengan nama folder yang berbeda!

$target = "extracted/myPics-02151985/"

Langkah 3: Pastikan Kalau File Zip Telah Terpilih

Sesegera mungkin menuju variabel $target Anda, tempelkan berikut:

  • Kita mulai dengan membuat array bernama $accepted_types. Pencarian cepat Google untuk "zip mimpe types" akan membawakan kita empat nilai: 'application/zip','application/z-zip-compressed','multipart/x-zip','application/s-compressed'. Setiap browser memiliki cara tersendiri untuk mendaftarkan jenis file. Kita harus pastikan setiap nilai dari instansi.
  • Untuk melakukan hal tersebut, kita mengecek untuk melihat jika ada item pada array kita yang memiliki nilai sama dengan "$_FILES['fupload']['type']. Jika mereka memilikinya, kita akan mengatur variabel "$okay" menjadi "true" - dan dapat berpisah dari statemen 'for' dan memastikan sisanya bahwa pengguna telah memilih file zip.

Sayangnya, Safari dan Chrome tidak mendaftarkan zip file. Ini menimbulkan masalah untuk kita. Setelah sedikit penelitian, saya tidak dapat menemukan solusi yang mudah - tanpa menggunakan ekstensi (PEAR). Sebagai gantinya, kita akan memastikan kalau nama file paling tidak berakhir dengan "zip". Seharusnya perlu dicatat jika ini tidak 100% aman. Bagaimana jika pengguna mengunggah jenis file yang berbeda yang berakhiran 'zip'? Silahkan tawarkan rekomendasi! :)

  • Kita akan menggunakan operator ternary untuk menjaga statemen ini sesuai garis. Jika ekstensi dari nama file ($name[1]) sama dengan 'zip', kita akan mengatur $okey ke true. Selain itu, itu akan sama dengan 'false'.

Berikutnya, kita akan mengecek untuk melihat jika $okay itu false. Jika ya, kita tahu kalau file 'zip' tidak dipilih. Pada kasus tersebut, kita akan menghentikan PHP.

Langkah 4: Menyimpan File Zip

  • Pertama kita akan perlu membuat direktori yang kita referensikan dengan variabel $target kita. Ini dapat dengan mudah diselesaikan dengan fungsi "mkdir"
  • Berikutnya, mari coba memindahkan file yang diunggah, dari direktori sementara, ke direktori $target. Jika prosedur itu dapat dilakukan dengan sukses, kita akan memanggil fungsi "openZip".

Langkah 5: Fungsi openZip()

Buat halaman baru dan simpan itu sebagai "function.php". sekarang tambahkan kode berikut:

Upload Form

Fungsi ini akan menerima satu parameter: $file_to_open. Parameter ini akan mengandung lokasi dari file zip yang sedang kita coba ekstrak!

  • Untuk menggunakan kelas ZipArchive(), pertama Anda harus memastikan untuk mengizinkan 'php_zip.dll' pada file "php.ini" anda. Dengan mudah cari string tersebut, dan hapus titik koma.
    PHP.NET Zip info
  • Dengan beberapa class, kita perlu membuat instansi baru dari objek. Kita akan memanggil method "open" dan melewaatkannya dalam lokasi file yang seharusnya dibuka. Jika dilakukan dengan sukses, metode ini akan kembali 'true'. Jika itu kasusnya, kita akan mengekstrak konten dari file zip ke dalam folder. Kita telah membuat jalan menuju folder ini ketika kita membuat variabel $target. (Catatan - Untuk dapat mengakses variable tersebut, Anda harus menambahkan "global" di depan variabel. Ini akan mengatakan kepada PHP untuk pergi keluar dari fungsi sekarang dan mencari variabel $target)
  • Setelah file telah diekstrak, kita akan menghapus file zip - sebagaimana sudah tidak membutuhkannya!

Ingat - kita telah membuat file baru 'function.php', tetapi kita perlu memasukannya! Bubuhkan berikut ke bagian atas halaman 'index.php' Anda, segera setelah pembuka tag PHP.

Echo kontennya

Echoing out the contents

Apa  yang kita miliki sejauh ini bekerja dengan sempurna! Tetapi, untuk memberi Anda umpan balik, mari pindai direktori yang baru dan echo kontennya. Anda seharusnya menghapus blok kode berikut dari proyek anda. Ini hanya untuk menguji. Jika anda ingin menahannya, echo informasinya keluar dalam tag body.

Saya tidak akan membahas bagian ini terlalu banyak - karena itu tidak perlu. Bagaimanapun, jika anda ingin penjelasan penuh, pastikan menonton screencast terkait! Untuk menyimpulkannya dengan cepat, script terakhir memindai direktori baru kita dan melakukan echo pada daftar tak berurut yang mengandung konten.

Selesai

Tidak terlalu sulit, bukan? Ini fitur rapih yang bisa dengan mudah diimplementasikan pada proyek anda. Apa yang anda pikirkan untuk keamanan ketika tiba saatnya mengunggah file zip? Bagaimana Kita bisa yakin kalau file zip tersebut tidak membahayakan? Saya ingin mendengar pendapat semuanya tentang implikasi keamanan. Jika tidak ditangani dengan benar, peretas dapat membahayakan server. Mari diskusikan hal itu! Ini memungkinkan mencari jenis file yang berbahaya (file .htaccess) dan menghapusnya.

Halaman akhir Index.php.

  • Berlangganan pada NETTUTS RSS Feed untuk lebih banyak tus web development dan artikel.


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.