Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menghantar dan menerima pakej termampat dalam jumlah melalui PHP ZipArchive?

Bagaimana untuk menghantar dan menerima pakej termampat dalam jumlah melalui PHP ZipArchive?

WBOY
WBOYasal
2023-07-21 11:04:48885semak imbas

Bagaimana untuk menghantar dan menerima pakej termampat dalam jumlah melalui PHP ZipArchive?

Dalam pembangunan web, kadangkala perlu membungkus fail besar atau berbilang fail ke dalam pakej termampat untuk penghantaran. Walau bagaimanapun, disebabkan oleh had penghantaran rangkaian, kadangkala keseluruhan pakej termampat tidak boleh dihantar atau diterima pada satu masa. Untuk menyelesaikan masalah ini, kami boleh menggunakan kelas ZipArchive PHP untuk menghantar dan menerima pakej termampat dalam jumlah.

  1. Buat pakej termampat volum terbahagi

Pertama, kita perlu mencipta contoh pakej termampat dan menetapkan beberapa parameter asas. Kemudian, kita boleh menggunakan kaedah addFile() untuk menambah fail yang perlu dimampatkan pada pakej dimampatkan. Selepas menambah semua fail, gunakan kaedah split() untuk membahagikan arkib kepada berbilang jilid. Kemudian, kita boleh menggunakan kaedah renameIndex() untuk menukar nama setiap jilid kepada peraturan penamaan yang ditentukan. Akhir sekali, gunakan kaedah close() untuk menutup pakej termampat.

Berikut ialah contoh kod:

$zip = new ZipArchive();
$zip_name = 'files.zip';
$chunk_size = 1024 * 1024; // 分卷大小,默认为1MB
$split_index = 1; // 第一个分卷的索引

if ($zip->open($zip_name, ZipArchive::CREATE) === TRUE) {
    $files = array('file1.jpg', 'file2.png', 'file3.txt');
    
    foreach ($files as $file) {
        $zip->addFile($file);
    }
    
    $zip->split($chunk_size);
    
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $zip->renameIndex($i, $split_index . '_' . $zip->getNameIndex($i));
        $split_index++;
    }
    
    $zip->close();
}

Kod di atas mula-mula mencipta objek ZipArchive, menentukan nama fail pakej termampat sebagai 'files.zip', dan saiz volum ialah 1MB. Kemudian, tiga fail telah ditambahkan pada pakej termampat. Seterusnya, gunakan kaedah split() untuk membahagikan pakej termampat kepada berbilang jilid dan gunakan kaedah renameIndex() untuk menukar nama setiap jilid kepada peraturan penamaan yang ditentukan. Akhir sekali, tutup pakej termampat melalui kaedah close(). . Kita boleh menggunakan kaedah merge() yang disediakan oleh kelas ZipArchive untuk mencapai ini. Kemudian, gunakan kaedah extractTo() untuk mengekstrak fail dalam pakej termampat ke direktori yang ditentukan.

    Berikut ialah contoh kod:
  1. $zip = new ZipArchive();
    $zip_name = 'files.zip';
    $chunk_size = 1024 * 1024; // 分卷大小,默认为1MB
    $output_dir = 'output/';
    
    // 获取所有分卷文件
    $files = glob('*.zip');
    
    if ($zip->open($zip_name, ZipArchive::CREATE) === TRUE) {
        foreach ($files as $file) {
            $zip->merge($file, $zip->numFiles);
        }
        
        $zip->extractTo($output_dir);
        $zip->close();
    
        // 删除所有分卷文件
        foreach ($files as $file) {
            unlink($file);
        }
    }
  2. Kod di atas mula-mula mencipta objek ZipArchive, menentukan nama fail pakej termampat sebagai 'files.zip', dan saiz volum ialah 1MB. Kemudian, gunakan fungsi glob() untuk mendapatkan semua fail volum. Kemudian, gunakan kaedah merge() untuk menyepadukan semua volum ke dalam pakej termampat yang lengkap. Akhir sekali, gunakan kaedah extractTo() untuk mengekstrak fail dalam pakej termampat ke direktori output yang ditentukan. Selepas penyahmampatan selesai, padam semua fail volum melalui fungsi nyahpaut().

Melalui contoh kod di atas, kita boleh menggunakan kelas PHP ZipArchive untuk menghantar dan menerima pakej termampat dalam jumlah. Ini membolehkan kawalan dan pemprosesan yang lebih baik bagi pemindahan fail besar, meningkatkan kecekapan dan kestabilan pemindahan.

Atas ialah kandungan terperinci Bagaimana untuk menghantar dan menerima pakej termampat dalam jumlah melalui PHP ZipArchive?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn