Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Memadamkan Direktori dan Keseluruhan Kandungannya (fail + sub dir) secara Rekursif dalam PHP

Cara Memadamkan Direktori dan Keseluruhan Kandungannya (fail + sub dir) secara Rekursif dalam PHP

WBOY
WBOYasal
2024-08-28 11:08:03867semak imbas

How to Recursively Delete a Directory and its Entire Contents (files + sub dirs) in PHP

PHP: PHP (Hypertext Preprocessor) ialah bahasa skrip bahagian pelayan sumber terbuka yang digunakan secara meluas yang direka khusus untuk pembangunan web. Ia pada asalnya dicipta oleh Rasmus Lerdorf pada tahun 1994 dan sejak itu telah berkembang menjadi bahasa berkuasa yang digunakan oleh berjuta-juta pembangun di seluruh dunia.

PHP digunakan terutamanya untuk membangunkan halaman web dinamik dan aplikasi web. Ia membolehkan pembangun membenamkan kod PHP dalam HTML, menjadikannya mudah untuk mencampurkan logik sisi pelayan dengan lapisan pembentangan. Skrip PHP dilaksanakan pada pelayan, dan HTML yang terhasil dihantar ke pelayar klien.

Terdapat pelbagai cara untuk memadam secara rekursif direktori dan keseluruhan kandungannya (fail dan subdirektori) dalam PHP. Berikut adalah tiga kaedah biasa:

  • Menggunakan fungsi rmdir() dan nyahpaut() secara rekursif

  • Menggunakan fungsi glob().

  • Menggunakan kelas RecursiveDirectoryIterator dan RecursiveIteratorIterator

Menggunakan fungsi rmdir() dan nyahpaut() secara rekursif

Untuk memadam secara rekursif direktori dan keseluruhan kandungannya (fail dan subdirektori) dalam PHP menggunakan fungsi rmdir() dan nyahpaut(),

Contoh

<?php
function deleteDirectory($dirPath) {
   if (is_dir($dirPath)) {
      $files = scandir($dirPath);
      foreach ($files as $file) {
         if ($file !== '.' && $file !== '..') {
            $filePath = $dirPath . '/' . $file;
            if (is_dir($filePath)) {
               deleteDirectory($filePath);
            } else {
               unlink($filePath);
            }
         }
      }
      rmdir($dirPath);
   }
}
?>

Berikut ialah Penjelasan Kod

Fungsi deleteDirectory() ditakrifkan, yang mengambil laluan direktori sebagai parameter.

Ia menyemak sama ada laluan yang diberikan ialah direktori menggunakan is_dir($dirPath). Jika ia bukan direktori, fungsi itu kembali.

Jika ia adalah direktori, ia menggunakan scandir($dirPath) untuk mendapatkan semula senarai fail dan direktori dalam direktori yang ditentukan.

Ia berulang melalui setiap fail dan direktori, tidak termasuk entri khas "." dan "..".

Untuk setiap entri, ia membina laluan fail penuh dengan menggabungkan laluan direktori dan nama fail.

Jika entri ialah subdirektori, fungsi deleteDirectory() dipanggil secara rekursif pada subdirektori tersebut.

Jika entri ialah fail, nyahpaut($filePath) digunakan untuk memadam fail.

Selepas memproses semua fail dan subdirektori, rmdir($dirPath) dipanggil untuk mengalih keluar direktori kosong itu sendiri.

Untuk menggunakan fungsi ini, hanya panggilnya dengan laluan direktori yang ingin anda padamkan:

<?php
   $directoryPath = '/path/to/directory';
   deleteDirectory($directoryPath);
?>

Pastikan anda mempunyai kebenaran yang betul untuk memadam fail dan direktori dalam laluan yang ditentukan.

Menggunakan fungsi glob()

Untuk memadam secara rekursif direktori dan keseluruhan kandungannya (fail dan subdirektori) dalam PHP menggunakan fungsi glob(),

Contoh

<?php
function deleteDirectory($dirPath) {
   $files = glob($dirPath . '/*');
   foreach ($files as $file) {
      if (is_dir($file)) {
         deleteDirectory($file);
      } else {
         unlink($file);
      }
   }
   rmdir($dirPath);
}
?>

Berikut ialah Penjelasan Kod

Fungsi deleteDirectory() ditakrifkan, yang mengambil laluan direktori sebagai parameter.

Ia menggunakan fungsi glob() dengan corak $dirPath . '/*' untuk mendapatkan semula senarai fail dan direktori dalam direktori yang ditentukan.

Ia berulang melalui setiap entri yang diperoleh daripada glob().

Untuk setiap entri, ia menyemak sama ada ia adalah direktori menggunakan is_dir($fail).

Jika ia adalah direktori, fungsi deleteDirectory() dipanggil secara rekursif pada subdirektori itu untuk memadamkan kandungannya.

Jika ia fail, nyahpaut($fail) digunakan untuk memadamkan fail.

Selepas memproses semua fail dan subdirektori, rmdir($dirPath) dipanggil untuk mengalih keluar direktori kosong itu sendiri.

Untuk menggunakan fungsi ini, hanya panggilnya dengan laluan direktori yang ingin anda padamkan:

<?php
$directoryPath = '/path/to/directory';
deleteDirectory($directoryPath);
?>

Pastikan anda mempunyai kebenaran yang betul untuk memadam fail dan direktori dalam laluan yang ditentukan.

Menggunakan kelas RecursiveDirectoryIterator dan RecursiveIteratorIterator

Untuk memadam secara rekursif direktori dan keseluruhan kandungannya (fail dan subdirektori) dalam PHP menggunakan kelas RecursiveDirectoryIterator dan RecursiveIteratorIterator,

Contoh

<?php
function deleteDirectory($dirPath) {
   $iterator = new RecursiveIteratorIterator(
      new RecursiveDirectoryIterator($dirPath, 
RecursiveDirectoryIterator::SKIP_DOTS),
      RecursiveIteratorIterator::CHILD_FIRST
   );
   foreach ($iterator as $file) {
      if ($file->isDir()) {
         rmdir($file->getPathname());
      } else {
         unlink($file->getPathname());
      }
   }
     rmdir($dirPath);
}

?>

Berikut ialah Penjelasan Kod

Fungsi deleteDirectory() ditakrifkan, yang mengambil laluan direktori sebagai parameter.

Ia mencipta objek RecursiveDirectoryIterator menggunakan laluan direktori yang ditentukan. Bendera RecursiveDirectoryIterator::SKIP_DOTS digunakan untuk mengecualikan entri khas "." dan ".." daripada lelaran.

Ia mencipta objek RecursiveIteratorIterator untuk melelaran melalui fail dan direktori secara rekursif. Bendera RecursiveIteratorIterator::CHILD_FIRST digunakan untuk memastikan elemen anak diproses sebelum elemen induk.

Ia berulang melalui setiap fail dan direktori menggunakan gelung foreach pada $iterator.

Untuk setiap entri, ia menyemak sama ada ia adalah direktori menggunakan $fail->isDir().

Jika ia adalah direktori, rmdir($file->getPathname()) digunakan untuk mengalih keluar direktori.

If it's a file, unlink($file->getPathname()) is used to delete the file.

After processing all files and subdirectories, rmdir($dirPath) is called to remove the empty directory itself.

To use this function, simply call it with the path of the directory you want to delete:

<?php
   $directoryPath = '/path/to/directory';
   deleteDirectory($directoryPath);
?>

Make sure you have proper permissions to delete the files and directories within the specified path.

Conclusion

These methods provide different approaches to achieve the same result. You can choose the method that suits your specific requirements and coding preferences. Remember to handle permissions properly to ensure that you have the necessary privileges to delete files and directories.

Atas ialah kandungan terperinci Cara Memadamkan Direktori dan Keseluruhan Kandungannya (fail + sub dir) 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