Advertisement
  1. Code
  2. Coding Fundamentals

How to List Files in a Directory in PHP

Scroll to top

In this article, we’ll discuss how you can get a list of all the files in a directory in PHP.

In your day-to-day PHP development, you often need to deal with a file system—for example, getting a list of files in a specific directory. PHP provides a few different ways of reading the contents of a directory easily. Today, we’ll go through all these methods, along with examples to understand how each one works.

The opendir, readdir, and closedir Functions

In this section, we’ll discuss the opendir, readdir, and closedir functions to see how you can use them to get a list of files in a specific directory.

The opendir function allows you to open up a directory handle, which you can use along with other functions for different operations on the directory. You need to pass the path to the directory in the first argument of the opendir function. If the directory path is valid, a directory handle resource will be returned.

The readdir function allows you to read a directory. You need to provide a valid directory handle in the first argument of the readdir function, and you can iterate over all the entries and get a list of all files in a directory.

The closedir function allows you to close the directory handle which is opened by the opendir function. It’s a good practice to use the closedir function once you’re done with your operations on the directory handle (which was initially opened by the opendir function).

Now, let’s see it in action in the following example.

1
<?php
2
$arrFiles = array();
3
$handle = opendir('/path/to/directory');
4
5
if ($handle) {
6
    while (($entry = readdir($handle)) !== FALSE) {
7
        $arrFiles[] = $entry;
8
    }
9
}
10
11
closedir($handle);
12
?>

Firstly, we’ve used the opendir function to get the directory handle. Next, we’ve used the readdir function to iterate over the $handle directory handle and store a list of files in the $arrFiles array.

The scandir Function

In this section, we’ll see how you can use the scandir function to get directory contents.

The scandir function is a pretty straightforward way to get a list of files and directories in a specific directory. You just need to pass a directory path which you want to read in the first argument of the scandir function.

Let’s go through the following example to understand how it works.

1
<?php
2
$arrFiles = scandir('/path/to/directory');
3
?>

As you can see, this provides a list of files and directories in a single call! If you just need to get a list of files in a directory, this is a better choice than using opendir, readdir, and closedir.

The glob Function

The glob function works similarly to the scandir function, with the difference that it allows you to specify a pattern for filtering and matching the files in the directory.

Let’s see how to use the glob function to read all the contents of a specific directory.

1
<?php
2
$arrFiles = glob('/path/to/dir/*');
3
?>

As you can see, we’ve passed the * pattern since we want to read all the contents. On the other hand, if you want to list only a specific type of file, you can do that as well, as shown in the following snippet.

1
<?php
2
$arrFiles = glob('/path/to/dir/*.txt');
3
?>

in this case, $arrFiles would contain only the names of .txt files.

The dir Function

The options that we’ve discussed so far allow you to read directory contents in a procedural way. In this section, we’ll see how you can use the dir function, which is an object-oriented mechanism for reading a directory.

When you use the dir function, and pass a directory path in the first argument, it returns an instance of the Directory class, which you can use subsequently to read the directory contents.

Let’s go through the following example to see how it works exactly.

1
<?php
2
$arrFiles = array();
3
$objDir = dir("/path/to/dir");
4
5
while (false !== ($entry = $objDir->read())) {
6
   $arrFiles[] = $entry;
7
}
8
9
$objDir->close();
10
?>

First, we used the dir function to initialize an instance of the Directory class into the $objDir variable. Next, we used the read method of the Directory class to iterate over all the entries.

The FilesystemIterator Class

In this section, we’ll see how you can use the FilesystemIterator class to read directory contents. The benefit of using the FilesystemIterator class is that you can extend the methods of this class, and it also provides a lot of other useful methods that allow you to fetch various information about the files.

Let’s go through the following example to understand how it works.

1
<?php
2
$arrFiles = array();
3
$iterator = new FilesystemIterator("/path/to/directory");
4
5
foreach($iterator as $entry) {
6
    $arrFiles[] = $entry->getFilename();
7
}
8
?>

As you can see, it’s really easy to use the FilesystemIterator class and iterate over the entries. In the above example, we’ve used the getFileName method of the FilesystemIterator class to get the file name. However, the FilesystemIterator class also provides several utility methods like getExtension, getSize, getPathname, and so on.

So that’s how you can use the FilesystemIterator class to get a list of files in a directory.

Conclusion

Today, we discussed different ways of listing all the files in a directory in PHP. Here's a table to compare each method to help you choose which one is right for you.

Function or Class Notes
opendir, readdir and closedir functions not the simplest or most feature-rich method
scandir function simplest way to read a file list
glob function very simple and allows pattern matching
dir function object-oriented version of readdir
FilesystemIterator class can provide other info about files, like size or permissions
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.