Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mengzip Direktori secara Rekursif dalam PHP?

Bagaimana untuk Mengzip Direktori secara Rekursif dalam PHP?

DDD
DDDasal
2024-12-11 03:20:10966semak imbas

How to Recursively Zip a Directory in PHP?

Cara [Rekursif] Zip Direktori dalam PHP

Matlamatnya adalah untuk mengezip direktori dengan berkesan, termasuk semua subdirektori dan failnya, dalam PHP.

Pendekatan Menggunakan Zip PHP Kelas

Anda boleh menggunakan kelas Zip PHP untuk mencapai ini. Kod yang disediakan menawarkan pendekatan asas, tetapi ia hanya beroperasi dengan fail individu, bukan direktori.

Kod Kerja

Untuk menangani cabaran ini, pertimbangkan kod berikut:

function Zip($source, $destination)
{
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }

    $source = str_replace('\', '/', realpath($source));

    if (is_dir($source) === true)
    {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file)
        {
            $file = str_replace('\', '/', $file);

            // Ignore "." and ".." folders
            if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
                continue;

            $file = realpath($file);

            if (is_dir($file) === true)
            {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            }
            else if (is_file($file) === true)
            {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    }
    else if (is_file($source) === true)
    {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}

Penggunaan:

Gunakan fungsi Zip seperti yang ditunjukkan di sini:

Zip('/folder/to/compress/', './compressed.zip');

Kod ini berulang secara berulang melalui direktori sumber yang ditentukan dan subdirektorinya, menambah fail dan direktori kosong pada arkib zip. Operasinya serasi dengan kedua-dua platform Windows dan Linux.

Atas ialah kandungan terperinci Bagaimana untuk Mengzip Direktori secara Rekursif dalam PHP?. 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