How to Upload Complete Zip File of Code to Website
Indonesian (Bahasa Indonesia) translation by Anthoni Hermanto (you lot can likewise view the original English article)
ThemeForest memiliki fitur yang bagus; yaitu memperbolehkan penulis untuk mengupload file zippo 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 grade upload simple yang membolehkan pengguna untuk memilih file zip.
- Pastikan kalau pengguna memilih file aught, dan kemudian simpan sebagai file unik.
- Ekstrak konten dari file zip dan simpan ke dalam folder spesifik.
- Hapus file nil dan kemudian echo kontennya.
Langkah 1: Membuat Form Upload
- Buat file baru dan simpan sebagai index.html pada root dari solusi Anda.
- Berikutnya, kita akan membuat form unproblematic. Paste berikut ini ke dalam.
<form enctype="multipart/class-data" action="" method="post"> <input blazon="file" proper name="fupload" /><br /> <input type="submit" value="Upload Cypher File" /> </form>
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 activity ke halaman yang sama dan method ke mail.
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:
<?php if(isset($_FILES['fupload'])) { $filename = $_FILES['fupload']['proper name']; $source = $_FILES['fupload']['tmp_name']; $type = $_FILES['fupload']['type'];
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']['proper name'] = "myPics.nada"
- $_FILES['fupload']['tmp_name'] = direkotri sementara pada server.
- $_FILES['fupload']['type'] = "awarding/zip". (Nilai ini dapat berubah tergantung dari browser mana file diupload)
Berikutnya, mari bagi nama file menjadi dua: namanya, dan ekstensinya.
$name = explode('.', $filename); $target = 'extracted/' . $name[0] . '-' . fourth dimension() . '/';
Lanjutkan dengan contoh kita file "myPics.aught" - $name[0] akan sama dengan "myPics". $proper 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 binder yang berbeda!
$target = "extracted/myPics-02151985/"
Langkah iii: Pastikan Kalau File Zip Telah Terpilih
Sesegera mungkin menuju variabel $target Anda, tempelkan berikut:
$accepted_types = array('application/zip', 'application/ten-nix-compressed', 'multipart/x-zip', 'application/due south-compressed'); foreach($accepted_types every bit $mime_type) { if($mime_type == $type) { $okay = truthful; break; } }
- Kita mulai dengan membuat array bernama $accepted_types. Pencarian cepat Google untuk "cypher mimpe types" akan membawakan kita empat nilai: 'application/zip','application/z-null-compressed','multipart/x-nix','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 zilch.
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 "cipher". Seharusnya perlu dicatat jika ini tidak 100% aman. Bagaimana jika pengguna mengunggah jenis file yang berbeda yang berakhiran 'null'? Silahkan tawarkan rekomendasi! :)
$okay = strtolower($name[ane]) == 'zip' ? true: false;
- Kita akan menggunakan operator ternary untuk menjaga statemen ini sesuai garis. Jika ekstensi dari nama file ($name[1]) sama dengan 'cipher', kita akan mengatur $okey ke true. Selain itu, itu akan sama dengan 'imitation'.
Berikutnya, kita akan mengecek untuk melihat jika $okay itu fake. Jika ya, kita tahu kalau file 'zip' tidak dipilih. Pada kasus tersebut, kita akan menghentikan PHP.
if(!$okay) { die("Please choose a nada file, dummy!"); }
Langkah 4: Menyimpan File Zip
mkdir($target); $saved_file_location = $target . $filename; if(move_uploaded_file($source, $saved_file_location)) { openZip($saved_file_location); } else { dice("There was a problem. Distressing!"); }
- 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 "role.php". sekarang tambahkan kode berikut:
<?php role openZip($file_to_open) { global $target; $goose egg = new ZipArchive(); $ten = $nothing->open($file_to_open); if($x === true) { $zip->extractTo($target); $naught->close(); unlink($file_to_open); } else { die("There was a problem. Please try again!"); } } ?>
Fungsi ini akan menerima satu parameter: $file_to_open. Parameter ini akan mengandung lokasi dari file zippo yang sedang kita coba ekstrak!
Ingat - kita telah membuat file baru 'function.php', tetapi kita perlu memasukannya! Bubuhkan berikut ke bagian atas halaman 'alphabetize.php' Anda, segera setelah pembuka tag PHP.
require_once 'functions.php';
Echo kontennya
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.
$scan = scandir($target . $proper noun[0]); impress '<ul>'; for ($i = 0; $i<count($scan); $i++) { if(strlen($browse[$i]) >= iii) { $check_for_html_doc = strpos($scan[$i], 'html'); $check_for_php = strpos($browse[$i], 'php'); if($check_for_html_doc === false && $check_for_php === false) { echo '<li>' . $scan[$i] . '</li>'; } else { echo '<li><a href="' . $target . $name[0] . '/' . $scan[$i] . '">' . $browse[$i] . '</a></li>'; } } } print '</ul>'; }
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 nothing? 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.
<?php include 'functions.php'; if(isset($_FILES['fupload'])) { $filename = $_FILES['fupload']['proper name']; $source = $_FILES['fupload']['tmp_name']; $type = $_FILES['fupload']['type']; $name = explode('.', $filename); $target = 'extracted/' . $proper noun[0] . '-' . fourth dimension() . '/'; // Ensures that the right file was called $accepted_types = assortment('application/zip', 'application/10-zip-compressed', 'multipart/x-zip', 'application/south-compressed'); foreach($accepted_types as $mime_type) { if($mime_type == $blazon) { $okay = truthful; break; } } //Safari and Chrome don't register zip mime types. Something better could be used here. $okay = strtolower($name[i]) == 'nix' ? true: imitation; if(!$okay) { die("Please choose a zip file, dummy!"); } mkdir($target); $saved_file_location = $target . $filename; if(move_uploaded_file($source, $saved_file_location)) { openZip($saved_file_location); } else { die("In that location was a problem. Distressing!"); } // This last role is for example but. It can be deleted. $scan = scandir($target . $name[0]); print '<ul>'; for ($i = 0; $i<count($browse); $i++) { if(strlen($browse[$i]) >= 3) { $check_for_html_doc = strpos($scan[$i], 'html'); $check_for_php = strpos($scan[$i], 'php'); if($check_for_html_doc === simulated && $check_for_php === faux) { echo '<li>' . $scan[$i] . '</li>'; } else { echo '<li><a href="' . $target . $proper noun[0] . '/' . $scan[$i] . '">' . $scan[$i] . '</a></li>'; } } } impress '</ul>'; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://world wide web.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>How to Upload and Open Aught Files With PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-viii"> </caput> <trunk> <div id="container"> <h1>Upload A Nothing File</h1> <form enctype="multipart/form-data" action="" method="post"> <input type="file" name="fupload" /><br /> <input blazon="submit" value="Upload Zip File" /> </course> </div><!--cease container--> </body> </html>
- Berlangganan pada NETTUTS RSS Feed untuk lebih banyak tus spider web development dan artikel.
Source: https://code.tutsplus.com/id/articles/how-to-open-zip-files-with-php--net-2289
0 Response to "How to Upload Complete Zip File of Code to Website"
Post a Comment