Lệnh DIR trên Windows và lệnh ls trên Linux đều hiển thị danh sách các tệp trong thư mục hiện tại. Những lệnh này có thể được sử dụng với các tham số khác nhau để áp dụng các điều kiện cho danh sách các tệp được hiển thị. PHP cung cấp một vài tùy chọn để liệt kê các tệp trong một thư mục nhất định một cách lập trình.
Hàm opendir() trong PHP tương tự như hàm fopen(). Nó trả về các tay cầm đến thư mục để nội dung của thư mục có thể được đọc theo cách tuần tự.
opendir(string $directory, ?resource $context = null): resource|false
Hàm này mở một tay cầm thư mục để được sử dụng trong các lệnh closedir(), readdir() và rewinddir() tiếp theo.
Hàm readdir() đọc mục tiếp theo có sẵn từ tay cầm luồng được trả về bởi hàm opendir() .
readdir(?resource $dir_handle = null): string|false
Ở đây, dir_handle là tay cầm thư mục đã được mở trước đó bằng opendir(). Nếu không được chỉ định, liên kết cuối cùng được mở bởi opendir() sẽ được giả định.
Hàm closedir() tương tự như hàm fclose() . Nó đóng tay cầm thư mục.
closedir(?resource $dir_handle = null): void
Hàm này đóng luồng thư mục được chỉ định bởi dir_handle. Luồng này phải đã được mở trước đó bằng opendir().
Đoạn mã PHP sau đây đọc từng tệp một từ thư mục hiện tại mà bạn đang đăng nhập.
<?php $dir = getcwd(); // Open a known directory, and proceed to read its contents if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename:" . $file . "\n"; } closedir($dh); } } ?>
Hàm scandir() lấy danh sách các tệp và thư mục con bên trong một thư mục nhất định.
scandir(string $directory, int $sorting_order = SCANDIR_SORT_ASCENDING, ?resource $context = null): array|false
Mặc định, "sorting_order" là theo thứ tự chữ cái tăng dần. Nếu tham số tùy chọn này được đặt thành SCANDIR_SORT_DESCENDING, thì thứ tự sắp xếp sẽ trở thành theo thứ tự chữ cái giảm dần. Nếu nó được đặt thành SCANDIR_SORT_NONE, thì kết quả sẽ trở thành không được sắp xếp.
Với đoạn mã PHP sau, hàm scandir() trả về một mảng các tệp trong thư mục đã cho.
<?php $dir = "c:/xampp/php/mydir/"; $files = scandir($dir); var_dump($files); ?>
Nó sẽ tạo ra output −
array(4) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(5) "a.txt" [3]=> string(5) "b.txt" }
Bạn có thể sử dụng một vòng lặp foreach để duyệt qua mảng được trả về bởi hàm scandir().
<?php $dir = "c:/xampp/php/mydir/"; $files = scandir($dir); foreach ($files as $file) echo $file . PHP_EOL; ?>
Nó sẽ tạo ra output −
. .. a.txt b.txt