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 that you can use to read directory contents 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 a family of opendir
, readdir
and closedir
functions to see how you can use it 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 a 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’ve done with your operations on the directory handle (which was initially opened by the opendir
function).
Now, let’s see it in action as shown in the following example.
<?php $arrFiles = array(); $handle = opendir('/path/to/directory'); if ($handle) { while (($entry = readdir($handle)) !== FALSE) { $arrFiles[] = $entry; } } closedir($handle); ?>
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 the 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.
<?php $arrFiles = scandir('/path/to/directory'); ?>
As you can see, this provides a list of files and directories in a single call! If you just need to get the 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 the specific directory.
<?php $arrFiles = glob('/path/to/dir/*'); ?>
As you can see, we’ve passed the *
pattern since we want to read all contents. On the other hand, if you want to list only specific type of files, you can do that as well as shown in the following snippet.
<?php $arrFiles = glob('/path/to/dir/*.txt'); ?>
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 directory contents.
Let’s go through the following example to see how it works exactly.
<?php $arrFiles = array(); $objDir = dir("/path/to/dir"); while (false !== ($entry = $objDir->read())) { $arrFiles[] = $entry; } $objDir->close(); ?>
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 as well.
Let’s go through the following example to understand how it works.
<?php $arrFiles = array(); $iterator = new FilesystemIterator("/path/to/directory"); foreach($iterator as $entry) { $arrFiles[] = $entry->getFilename(); } ?>
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 that you can use to list 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 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 |