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
Lepaskan: 2024-12-02 10:05:15
asal
839 orang telah melayarinya

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'));
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan