Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menyenaraikan Semua Fail dan Folder secara Rekursif dalam Direktori Menggunakan PHP, Mengelakkan Gelung Infinite dan Entri Pendua?

Bagaimanakah Saya Boleh Menyenaraikan Semua Fail dan Folder secara Rekursif dalam Direktori Menggunakan PHP, Mengelakkan Gelung Infinite dan Entri Pendua?

Linda Hamilton
Linda Hamiltonasal
2024-12-02 10:05:15842semak imbas

How Can I Recursively List All Files and Folders in a Directory Using PHP, Avoiding Infinite Loops and Duplicate Entries?

Menentukan Fail dan Folder dalam Direktori Menggunakan Fungsi PHP Rekursif

Perbincangan ini menyiasat kaedah untuk melintasi fail dan subdirektori direktori secara rekursif.

Yang disediakan kod:

function getDirContents($dir){
    $results = array();
    $files = scandir($dir);
    foreach($files as $key => $value){
        if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){
            $results[] = $value;
        } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) {
            $results[] = $value;
            getDirContents($dir. DIRECTORY_SEPARATOR .$value);
        }
    }
}
print_r(getDirContents('/xampp/htdocs/WORK'));

Dilema:
Kod yang diberikan mempunyai fungsi rekursif untuk meneroka direktori dan fail. Walau bagaimanapun, ia gagal untuk mengabaikan '.' dan '..', menghasilkan gelung yang berpotensi tidak berkesudahan. Selain itu, setiap fail dan direktori diduplikasi dalam keputusan.

Jawapannya:
Untuk menangani isu ini, kami boleh mengubah suai fungsi seperti berikut:

function getDirContents($dir, &$results = array()) {
    $files = scandir($dir);
    foreach ($files as $key => $value) {
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }
    return $results;
}

Kod ini:

  • Panggil fungsi realpath() untuk mendapatkan semula laluan sebenar setiap fail dan direktori, menghapuskan sebarang isu traversal yang berpotensi.
  • Abaikan direktori yang dilambangkan dengan '.' atau '..', yang boleh membawa kepada gelung tak terhingga.
  • Elakkan entri pendua dalam hasil dengan menyimpannya dalam tatasusunan rujukan yang diluluskan (&$hasil).

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyenaraikan Semua Fail dan Folder secara Rekursif dalam Direktori Menggunakan PHP, Mengelakkan Gelung Infinite dan Entri Pendua?. 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