ArrayObject (Bài trước)

Khởi tạo đối tượng DirectoryIterator

Đối tượng lớp DirectoryIterator cho phép truy vấn duyệt thư mục nhiều cấp, để khởi tạo dùng toán tử new, tham số khởi tạo là đường dẫn thư mục cần duyệt

$dirs = new \DirectoryIterator($directory)

Trong đó $directory là đường dẫn đến thư mục cần lấy thông tin, ví dụ /home

Sau khi khởi tạo xong, thì có thể dùng các hàm cơ bản sau để để kiểm tra thư mục $directory.

Một số hàm cơ bản của DirectoryIterator

  • getExtension ( void ): lấy đuôi file (phần mở rộng ví dụ php, jpg ...)
  • getFilename(): lấy tên file (như index.php)
  • getPath() : lấy đường đẫn chứa file, folder
  • getSize() : kích thước (bytes)
  • isDir() : kiểm tra có là thư mục không
  • isDot() : kiểm tra file, thư mục là . hoặc .. hay không
  • isFile() : kiểm tra có là file
  • isLink() : kiểm tra có là Sym Link
  • isReadable() : xem có được phép đọc
  • isWritable() : xem có được ghi

Ứng dụng

Lấy tất các các thư mục con, file trong một thư mục

(ngoại trừ ...)

foreach (new DirectoryIterator('../moodle') as $fileInfo) {
    if($fileInfo->isDot()) continue;
    echo $fileInfo->getFilename(), PHP_EOL;
}

Hàm đệ quy lấy tất cả thư mục con và file trong một thư mục

(Hàm đệ quy recursiveDirectoryIterator duyệt hết cây từ thư mục chỉ ra, trả về mảng các file, thư mục)

 public function recursiveDirectoryIterator ($directory = null, $files = array()) {
    $iterator = new \DirectoryIterator ( $directory );

    foreach ( $iterator as $info ) {
        if ($info->isFile ()) {
            $files [$info->__toString ()] = $info;
        } elseif (!$info->isDot ()) {
            $list = array($info->__toString () => $this->recursiveDirectoryIterator(
                        $directory.DIRECTORY_SEPARATOR.$info->__toString ()
            ));
            if(!empty($files))
                $files = array_merge_recursive($files, $filest);
            else {
                $files = $list;
            }
        }
    }
    return $files;
}

Đăng ký nhận bài viết mới
ArrayObject (Bài trước)