Selamat siang, Habr!
Selama setengah tahun terakhir, jalan bengkok dari proyek hewan peliharaan saya telah membawa saya ke hutan seperti itu, dari tempat itu masih tidak mungkin untuk keluar. Dan itu semua dimulai tanpa membahayakan - sebuah situs dengan gambar, tetapi rasa perfeksionisme, pengejaran freebie, serta beberapa fitur dari pola pikir saya mengubah ini, seperti yang awalnya direncanakan, sedikit berjalan ke perjalanan yang sangat panjang. Baiklah, seperti yang biasa dikatakan oleh seorang revolusioner burry: โBelajar, belajar dan belajar lagiโ, tetapi saya, mau tak mau, harus mengikuti nasihat ini.
Oh, sesuatu yang mengalihkan perhatian kita dari topik utama. Saya tidak akan membuat Anda bosan dengan pidato yang panjang, tetapi saya akan membahas urusan.
Buat arsip zip
Pada prinsipnya, saya tidak akan menulis ulang
spesifikasi di sini. Secara keseluruhan, tidak masuk akal untuk menggambarkan struktur juga, karena semua ini
dilakukan sebelum saya .
Bagi mereka yang terlalu malas untuk mengikuti tautan, saya hanya akan menjelaskan secara singkat bahwa arsip zip mana pun harus berisi:
- Entri file:
- Header file lokal
- Data yang berguna
- Deskriptor data (opsional, digunakan ketika kita tidak tahu ukuran file dan hashnya sampai kita membacanya sampai akhir)
- Header File Direktori Tengah (untuk setiap file. Ini seperti daftar isi buku, di mana setiap bagian dan halaman yang dapat ditemukan ditunjukkan)
- Akhir dari direktori pusat
Mengetahui hal ini, kita dapat mencoba menulis arsip sederhana yang hanya akan berisi dua file:
<?php
Cobalah untuk menjalankan kode primitif ini dan hasilnya akan memberi Anda file Lorem.zip yang akan berisi 1.txt dan 2.txt.
Mengapa
Tentu saja, setiap orang yang memadai akan mengatakan bahwa menulis arsip di php adalah pekerjaan yang sia-sia, terutama karena untuk format seperti zip, ada banyak implementasi yang siap pakai untuk setiap selera dan warna. Dan di php yang sama ada perpustakaan yang sudah jadi. Saya akan mengatakannya juga :)
Tetapi mengapa, mengapa, seluruh artikel ini, mengapa saya menghabiskan waktu menulisnya, dan Anda membacanya?
Dan kemudian, bahwa semuanya tidak begitu sederhana dan mengetahui cara kerja zip, membuka beberapa kemungkinan tambahan bagi kita.
Pertama, saya harap, setidaknya sedikit, tetapi ini akan membantu mereka yang ingin memahami struktur zip.
Dan kedua, membuat arsip dengan tangan kita sendiri, kita memiliki kontrol, dan, yang paling penting, akses ke data internalnya.
Kami dapat melakukan pra-penghitungan Header File Lokal dan Header Direktori Direktori Utama, dan kemudian atas permintaan membuat arsip zip dengan cepat dengan konten dan urutan file apa pun, cukup mengganti data ini. Dan tidak ada overhead kecuali untuk I / O.
Atau, kita dapat merekam arsip, mengunggahnya, misalnya, ke cloud, yang mendukung pengunduhan terfragmentasi dan, mengetahui offset untuk setiap file, mendapatkan file arsip apa saja, seolah-olah itu tidak ada dalam arsip sama sekali, menambahkan hanya satu judul permintaan. Dan kemudian semua ini dapat diproksi dan ...
Oke, jangan maju dulu. Jika Anda tertarik dengan topik ini, maka dalam artikel berikut ini saya akan mencoba mempertimbangkan peluang ini dan menunjukkan cara menggunakannya.
'diskNumber' => 0, // Saya biasanya menemukan 0 di mana-mana, dan khususnya saya memutuskan untuk tidak menyelidiki
Seperti yang disarankan, jumlah
volume dalam arsip multi-volume.