Selamat datang di tutorial cara daftar file dan folder di PHP. Jadi Anda perlu mendapatkan isi folder di PHP?
Cara umum untuk membuat daftar file dan folder di PHP adalah
- foreach (scandir("FOLDER") as $ff) { .. }
- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");0
- Buka dan baca foldernya
- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");_1
- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");_2
- Gunakan iterator
- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");_3
- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");_4
Itu mencakup dasar-dasarnya, tetapi apa bedanya?
ⓘ Saya telah menyertakan file zip dengan semua kode sumber di awal tutorial ini, jadi Anda tidak perlu menyalin-tempel semuanya… Atau jika Anda hanya ingin langsung masuk
TLDR – SLIDE CEPAT
Unduh & Catatan
UNDUH & CATATAN
Pertama, berikut adalah tautan unduhan ke kode contoh seperti yang dijanjikan
CATATAN CEPAT
Jika Anda menemukan bug, jangan ragu untuk berkomentar di bawah ini. Saya mencoba menjawab pertanyaan singkat juga, tetapi itu adalah satu orang versus seluruh dunia… Jika Anda sangat membutuhkan jawaban, silakan periksa daftar situs web saya untuk mendapatkan bantuan dalam pemrograman
DOWNLOAD KODE CONTOH
Klik di sini untuk mengunduh semua kode sumber contoh, saya telah merilisnya di bawah lisensi MIT, jadi silakan membangun di atasnya atau menggunakannya dalam proyek Anda sendiri
PHP DAPATKAN FILE FOLDER
Baiklah, sekarang mari kita masuk ke contoh mendapatkan file dan folder di PHP
METODE 1) SKANDIR
1A) SKANDIR DASAR
1a-skandir. php
<?php // (A) GET FILES/FOLDERS $dir = "YOUR/FOLDER/"; $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; } }- <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");5 akan memberi Anda daftar lengkap file dan folder dalam folder yang ditentukan dalam sebuah array
- Perhatikan, ini juga termasuk <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");6 dan <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");7 yang tersembunyi. Bagi mereka yang baru, ini masing-masing mewakili folder saat ini dan folder induk
- Kami tidak tertarik dengan "titik", jadi kami menghapusnya menggunakan <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");8
- Selebihnya cukup jelas – Ulangi file dan folder
1B) SCANDIR BACA SUB-FOLDER
1b-skandir. php
<?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");Jika Anda perlu "menggali" ke dalam sub-folder, buat fungsi rekursif - Jika entri adalah folder, berikan kembali ke fungsi rekursif itu sendiri
METODE 2) GLOB
2A) GLOB DASAR
2a-glob. php
// (A) GET FILES/FOLDERS $all = glob("YOUR/FOLDER/*"); // $all = glob("YOUR/FOLDER/*.{jpg,jpeg,webp,png,gif}", GLOB_BRACE); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }Sekarang, <?php // (A) RECURSIVE SCAN function rscan ($dir) { $all = array_diff(scandir($dir), [".", ".."]); $eol = PHP_EOL; foreach ($all as $ff) { if (is_file($dir . $ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($dir . $ff)) { echo "{$ff} - folder {$eol}"; rscan("$dir$ff/"); } } } // (B) GO! rscan("YOUR/FOLDER/");_9 akan mengambil semuanya. Jika Anda hanya memerlukan jenis file tertentu – // (A) GET FILES/FOLDERS $all = glob("YOUR/FOLDER/*"); // $all = glob("YOUR/FOLDER/*.{jpg,jpeg,webp,png,gif}", GLOB_BRACE); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }0 adalah opsi terbaik
2B) GLOB BACA SUB-FOLDER
2b-glob. php
// (A) RECURSIVE GLOB function rglob ($dir, $ext="*") { // (A1) GET FILES $eol = PHP_EOL; foreach (glob("$dir$ext", GLOB_BRACE) as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } } // (A2) GET FOLDERS foreach (glob("$dir*", GLOB_ONLYDIR | GLOB_MARK) as $ff) { echo "{$ff} - folder {$eol}"; rglob($ff, $ext); } } // (B) GO! rglob("YOUR/FOLDER/"); // rglob("YOUR/FOLDER/", "*.{jpg,jpeg,webp,png,gif}");"Glob rekursif" sedikit lebih bundaran, tetapi pada dasarnya - Dapatkan file terlebih dahulu, kemudian "gali" rekursif ke dalam folder
METODE 3) PEMBUKAAN
3A) PEMBUKAAN DASAR
3a-opendir. php
<?php // (A) OPEN DIR $dir = "YOUR/FOLDER/"; $dh = opendir($dir) or exit("Error opening $dir"); $eol = PHP_EOL; // (B) READ DIR while ($ff = readdir($dh)) { if ($ff!="." && $ff!="..") { $ff = $dir . $ff; if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }}Metode di atas akan "mengambil semuanya ke dalam array". Beberapa dari Anda ninja kode tajam seharusnya sudah menangkap potensi masalah – Bagaimana jika ada ribuan file di dalam folder? . Jadi alih-alih "mendapatkan semuanya sekaligus", // (A) GET FILES/FOLDERS $all = glob("YOUR/FOLDER/*"); // $all = glob("YOUR/FOLDER/*.{jpg,jpeg,webp,png,gif}", GLOB_BRACE); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }1 dan // (A) GET FILES/FOLDERS $all = glob("YOUR/FOLDER/*"); // $all = glob("YOUR/FOLDER/*.{jpg,jpeg,webp,png,gif}", GLOB_BRACE); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }2 akan membaca "entri demi entri"
3B) PEMBUKAAN BACA SUB-FOLDER
3a-opendir. php
<?php // (A) RECURSIVE OPEN-READ function rread ($dir) { $dh = opendir($dir); $eol = PHP_EOL; while ($ff = readdir($dh)) { if ($ff!="." && $ff!="..") { $ff = $dir . $ff; if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; rread("$ff/"); } }} } // (B) GO! rread("YOUR/FOLDER/");Nah, ini seharusnya tidak menjadi kejutan sekarang. Buat fungsi rekursif untuk membuka dan membaca sub-folder
METODE 4) DIRECTORY ITERATOR
4A) ITERATOR DASAR
4a-iterator. php
<?php // (A) NEW DIRECTORY ITERATOR $iterator = new DirectoryIterator("YOUR/FOLDER/"); $eol = PHP_EOL; // (B) LOOP FOLDER foreach ($iterator as $ff) { if ($ff->isDot()) { continue; } if ($ff->isFile()) { echo "{$ff->getFilename()} - file {$eol}"; } if ($ff->isDir()) { echo "{$ff->getFilename()} - folder {$eol}"; } }Terakhir, inilah cara “alternatif” untuk membaca entri folder demi entri – Menggunakan // (A) GET FILES/FOLDERS $all = glob("YOUR/FOLDER/*"); // $all = glob("YOUR/FOLDER/*.{jpg,jpeg,webp,png,gif}", GLOB_BRACE); $eol = PHP_EOL; // (B) LOOP THROUGH ALL foreach ($all as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }3
4B) ITERATOR BACA SUB-FOLDER
4b-iterator. php
<?php // (A) RECURSIVE ITERATOR function riterate ($dir) { $iterator = new DirectoryIterator($dir); $eol = PHP_EOL; foreach ($iterator as $ff) { if ($ff->isDot()) { continue; } if ($ff->isFile()) { echo "{$ff->getFilename()} - file {$eol}"; } if ($ff->isDir()) { echo "{$ff->getFilename()} - folder {$eol}"; riterate("{$dir}{$ff->getFilename()}/"); } } } // (B) GO! riterate("YOUR/FOLDER/");Nah… Kalian seharusnya sudah menguasai fungsi rekursif sekarang
BIT & LINK EKSTRA
Itu saja untuk tutorialnya, dan ini adalah bagian kecil tentang beberapa tambahan dan tautan yang mungkin berguna bagi Anda
EKSTRA) MENGGABUNGKAN GLOB & ITERATOR
5-glob-iterasi. php
// (A) GLOB ITERATOR $dir = "D:/DOCS/"; $eol = PHP_EOL; // $iterator = new ArrayObject(glob("$dir*.{jpg,jpeg,gif,png,bmp,webp}", GLOB_BRACE)); $iterator = new ArrayObject(glob("$dir*", GLOB_BRACE)); $iterator = $iterator->getIterator(); /* (B) OPTIONAL - PAGINATION $pgNow = 0; // current page $pgPage = 10; // entries per page $iterator = new LimitIterator($iterator, $pgNow * $pgPer, $pgPer); */ // (C) LOOP foreach ($iterator as $ff) { if (is_file($ff)) { echo "{$ff} - file {$eol}"; } if (is_dir($ff)) { echo "{$ff} - folder {$eol}"; } }Yang merupakan "metode terbaik"? . Tapi secara pribadi, "solusi terbaik" saya adalah kombinasi dari glob dan iterator - Ini sangat fleksibel, mampu membatasi jenis file, dan juga dengan mudah melakukan paginasi dengannya
LINK dan REFERENSI
- Scandir – PHP
- Bacadir – PHP
- Glob – PHP
- Direktori Iterator – PHP
VIDEO TUTORIAL
LEMBAR CHEAT INFOGRAFIS
Terima kasih telah membaca, dan kami telah sampai pada akhir. Saya harap ini membantu Anda untuk lebih memahami, dan jika Anda ingin berbagi sesuatu dengan panduan ini, jangan ragu untuk berkomentar di bawah ini. Semoga berhasil dan selamat membuat kode