Bagaimana untuk memadam subfolder di bawah folder menggunakan php

PHPz
Lepaskan: 2023-03-24 15:04:02
asal
1456 orang telah melayarinya

Jika anda seorang pembangun PHP, anda mungkin menghadapi keperluan untuk memadamkan folder di bawah folder. Walaupun PHP menyediakan fungsi terbina dalam untuk memadam fail dan folder, ia tidak menyediakan fungsi untuk memadam folder secara individu. Dalam artikel ini, kami akan menunjukkan kepada anda cara memadam subfolder di bawah folder menggunakan PHP.

Memadam subfolder di bawah folder adalah operasi biasa, terutamanya apabila anda perlu membersihkan fail lama dan tidak berguna. Dalam PHP, pemadaman folder boleh dicapai dengan menggunakan fungsi rmdir(). Fungsi ini menerima laluan ke folder sebagai hujah dan cuba memadamkannya. Tetapi ia hanya boleh memadamkan folder kosong, bukan folder tidak kosong.

Kendalian memadam folder bukan kosong dalam PHP agak rumit. Kerana anda perlu memadam semua fail dan subfolder di bawah folder terlebih dahulu, dan pastikan tiada ralat berlaku sebelum anda boleh memadam folder dengan jayanya. Nasib baik, PHP menyediakan fungsi yang dipanggil recursiveDirectoryDelete() yang boleh membantu kami memadam semua fail dan subfolder dengan mudah di bawah folder proses pelaksanaannya adalah seperti berikut:

function recursiveDirectoryDelete($directory){
    if(!is_dir($directory)){
        throw new InvalidArgumentException(sprintf('%s is not a directory', $directory));
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }

    rmdir($directory);
    return true;
}
Salin selepas log masuk

Dalam kod di atas, semak dahulu sama ada masuk. parameter ialah direktori. Jika ia bukan direktori, Pengecualian InvalidArgument akan dilemparkan.

Seterusnya, kami menggunakan kelas RecursiveDirectoryIterator dan kelas RecursiveIteratorIterator untuk beralih melalui semua subdirektori dan fail dalam direktori. Di sini kami juga melepasi pemalar SKIP_DOTS untuk melangkau direktori . dan .. untuk mengelakkan gelung tak terhingga

Kemudian, kami menyemak jenis fail atau direktori semasa dan menggunakan rmdir() atau unlink() Fungsi memadam sendiri. Akhir sekali, kami menggunakan fungsi rmdir() untuk memadam folder.

Dengan kod di atas, kami boleh memadamkan semua fail dan subfolder di bawah folder dengan memanggil fungsi recursiveDirectoryDelete().

Tetapi kami masih belum mencapai keperluan kami: cara memadamkan subfolder di bawah folder.

Dalam PHP, apabila anda perlu memadamkan subfolder di bawah folder, anda boleh memadamkan subfolder dengan memanggil fungsi recursiveDirectoryDelete() dahulu, dan kemudian memadam folder induknya.

function deleteSubdirectory($parentDirectory, $subDirectory)
{
    $subDirectoryPath = sprintf('%s/%s', $parentDirectory, $subDirectory);
    if (is_dir($subDirectoryPath)) {
        recursiveDirectoryDelete($subDirectoryPath);
        return true;
    }
    throw new InvalidArgumentException(sprintf('%s is not a directory under %s', $subDirectory, $parentDirectory)); 
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula membina laluan penuh subfolder dan kemudian menyemak sama ada ia adalah direktori. Jika ya, panggil fungsi recursiveDirectoryDelete() untuk memadamkannya. Jika tidak, pengecualian akan dilemparkan.

Kini kami telah menyelesaikan cara memadam subfolder di bawah folder. Menggabungkan dua fungsi di atas, kita boleh melaksanakan fungsi ini dengan mudah dalam PHP. Berikut ialah contoh lengkap:

function recursiveDirectoryDelete($directory){
    if(!is_dir($directory)){
        throw new InvalidArgumentException(sprintf('%s is not a directory', $directory));
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }

    rmdir($directory);
    return true;
}

function deleteSubdirectory($parentDirectory, $subDirectory)
{
    $subDirectoryPath = sprintf('%s/%s', $parentDirectory, $subDirectory);
    if (is_dir($subDirectoryPath)) {
        recursiveDirectoryDelete($subDirectoryPath);
        return true;
    }
    throw new InvalidArgumentException(sprintf('%s is not a directory under %s', $subDirectory, $parentDirectory)); 
}

$parentDirectory = '/path/to/directory';
$subDirectory = 'subdirectory';

deleteSubdirectory($parentDirectory, $subDirectory);
Salin selepas log masuk

Dalam contoh di atas, kami mula-mula mentakrifkan dua fungsi recursiveDirectoryDelete() dan deleteSubdirectory(), dan kemudian panggil fungsi deleteSubdirectory() untuk memadam subfolder yang ditentukan . Anda hanya perlu menggantikan $parentDirectory dan $subDirectory dengan laluan dan nama subfolder anda sendiri.

Ringkasan:

Memadamkan subfolder di bawah folder ialah operasi yang agak biasa dalam PHP. Kami boleh memadam semua fail dan subfolder dengan memanggil fungsi recursiveDirectoryDelete() dan menggunakan fungsi deleteSubdirectory() dalam kombinasi untuk memadam subfolder yang ditentukan. Harap artikel ini dapat membantu anda.

Atas ialah kandungan terperinci Bagaimana untuk memadam subfolder di bawah folder menggunakan php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan