Direktori itu seperti:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
Saya menggunakan kelas PHP Zip yang sama yang digunakan di PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . Saya tidak yakin bagaimana cara zip direktori daripada hanya sebuah file. Inilah yang saya miliki sejauh ini:
$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)
*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok
tetapi ketika saya mencoba untuk mengekstrak file zip yang diunduh terkait, saya mendapatkan "operasi tidak diizinkan"
Kesalahan ini hanya terjadi ketika saya mencoba unzip di mac saya, ketika saya membuka zip melalui baris perintah file unzip ok. Apakah saya perlu mengirim jenis konten tertentu saat diunduh, saat ini 'application / zip'
Jawaban:
Berikut adalah fungsi sederhana yang dapat memampatkan file atau direktori secara rekursif, hanya membutuhkan ekstensi zip yang akan dimuat.
Sebut saja seperti ini:
sumber
file_get_contents
dan menambahkan string. tidak zip mendukung penambahan file secara langsung?'/'
denganDIRECTORY_SEPARATOR
untuk membuatnya bekerja di Windows, tentunya. Jika tidak, Anda akan mendapatkan jalur lengkap (termasuk nama drive) di ZIP Anda, misC:\Users\...
.//
dengan\
karena ini benar-benar merusak foreach di windows. Jika Anda menggunakan built-inDIRECTORY_SEPARATOR
sebagaimana mestinya, tidak perlu mengganti. Pengkodean keras/
inilah yang menyebabkan beberapa pengguna mengalami masalah. Saya sedikit bingung mengapa saya mendapatkan arsip kosong. Revisi saya akan berjalan dengan baik di * nix dan Windows.Namun pengarsipan pohon direktori rekursif lainnya, diimplementasikan sebagai ekstensi ke ZipArchive. Sebagai bonus, fungsi pembantu kompresi pohon pernyataan tunggal disertakan. Nama lokal opsional didukung, seperti pada fungsi ZipArchive lainnya. Kesalahan menangani kode yang akan ditambahkan ...
sumber
Saya telah mengedit jawaban Alix Axel untuk mengambil argumen ketiga, ketika mengatur argumen ketiga ini ke
true
semua file akan ditambahkan di bawah direktori utama daripada langsung di folder zip.Jika file zip ada, file tersebut akan dihapus juga.
Contoh:
Struktur
true
zip argrument ketiga :Argrumen ketiga
false
atau struktur zip hilang:Kode yang diedit:
sumber
$maindir
nama yang disukai.PENGGUNAAN: thisfile.php? Dir =. / Path / to / folder (Setelah zip, itu mulai mengunduh juga :)
sumber
Coba tautan ini <- KODE SUMBER LAINNYA DI SINI
sumber
Inilah kode saya Untuk Zip folder dan sub foldernya dan file-nya dan membuatnya dapat diunduh dalam Format zip
Jika Ada Masalah Dengan Kode Beri Tahu Saya.
sumber
Saya perlu menjalankan fungsi Zip ini di Mac OSX
jadi saya akan selalu zip .DS_Store yang mengganggu itu.
Saya mengadaptasi https://stackoverflow.com/users/2019515/user2019515 dengan menyertakan file tambahanIgnore.
SO untuk mengabaikan .DS_Store dari zip, jalankan
zipIt ('/ path / ke / folder', '/path/to/compressed.zip', false, array ('. DS_Store'));
sumber
Solusi hebat tetapi untuk Windows saya, saya perlu melakukan modifikasi. Di bawah kode modifikasi
sumber
Kode ini berfungsi untuk windows dan linux.
sumber
Ini basis versi saya di Alix, berfungsi di Windows dan semoga di * nix juga:
sumber
Berikut ini adalah fungsi rekursif sederhana, mudah dibaca yang bekerja dengan sangat baik:
sumber
Mengikuti jawaban @ user2019515, saya perlu menangani pengecualian ke arsip saya. berikut adalah fungsi yang dihasilkan dengan sebuah contoh.
Fungsi Zip:
Bagaimana cara menggunakannya :
sumber