Menelusuri Folder Secara Rekursif di PHP

Muhammad Arslan 28 September 2017

Menelusuri Folder Secara Rekursif di PHP

Untuk menelusuri semua folder dan file yang ada di dalamnya, kita memerlukan teknik yang dinamakan rekursif. Namun bila membuatnya sendiri memang agak merepotkan. Tapi PHP sudah memiliki fitur tersebut dengan menggunakan suatu class.

RecursiveDirectoryIterator adalah sebuah modul di PHP yang dapat kita gunakan untuk menelusuri folder dan file secara rekursif. Pertama - tama PHP akan menelusuri semua folder dan file. Kemudian hasilnya akan ditampung ke sebuah array dan dapat diiterasi dengan mudah oleh kita.

Berikut adalah contoh script PHP untuk melakukan penelusuran rekursif terhadpa suatu folder.

<?php

$di = new RecursiveDirectoryIterator("/Users/ridwanbejo/Downloads/sb-portfolio");
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
	$file_size = $file->getSize();
    print ($filename . " - " . $file_size . " bytes. \n");
}

Dan bila script diatas kita jalankan di konsol, maka akan muncul output berikut:

$ php dir-traversal.php
/Users/ridwanbejo/Downloads/sb-portfolio/. - 408 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/.. - 1258 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/.DS_Store - 6148 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/.gitignore - 12 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/.travis.yml - 142 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/css/. - 102 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/css/.. - 408 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/css/portfolio-item.css - 363 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/gulpfile.js - 1124 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/index.html - 3973 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/LICENSE - 1092 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/package.json - 934 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/README.md - 4131 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/. - 204 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/.. - 408 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/.DS_Store - 6148 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/.. - 204 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/. - 272 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/.. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap-grid.css - 29140 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap-grid.min.css - 21780 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap-reboot.css - 4486 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap-reboot.min.css - 3604 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap.css - 156884 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/css/bootstrap.min.css - 124962 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/js/. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/js/.. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/js/bootstrap.js - 111390 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/bootstrap/js/bootstrap.min.js - 51143 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/jquery/. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/jquery/.. - 204 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/jquery/jquery.js - 268039 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/jquery/jquery.min.js - 86659 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/popper/. - 136 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/popper/.. - 204 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/popper/popper.js - 80747 bytes.
/Users/ridwanbejo/Downloads/sb-portfolio/vendor/popper/popper.min.js - 19033 bytes.