Bagaimana cara melihat direktori di php?

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

 

 

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

 

  • 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

Bagaimana cara mengakses direktori di PHP?

Fungsi dir() di PHP digunakan untuk menemukan instance dari kelas Direktori.

Bagaimana cara mendapatkan daftar file direktori di PHP?

Fungsi scandir() mengembalikan larik file dan direktori dari direktori yang ditentukan.

Apa itu __ dir __ PHP?

__DIR__ dapat digunakan untuk mendapatkan direktori kerja kode saat ini . Itu telah diperkenalkan di PHP mulai dari versi 5. 3. Ini mirip dengan menggunakan dirname(__FILE__). Biasanya digunakan untuk menyertakan file lain yang ada dalam file yang disertakan.

Bagaimana Anda memeriksa apakah suatu file ada di direktori PHP?

Fungsi is_dir() di PHP digunakan untuk memeriksa apakah file yang ditentukan adalah direktori atau bukan. Nama file dikirim sebagai parameter ke fungsi is_dir() dan mengembalikan True jika file tersebut adalah direktori selain itu mengembalikan False.