PHP glob

Summary: in this tutorial, you’ll learn how to use the PHP glob() function to get the list of files and directories that match a pattern.

Introduction to the PHP glob() function

The glob() function finds pathnames that match a pattern.

Here’s the syntax of the glob() function:

glob ( string $pattern , int $flags = 0 ) : array|falseCode language: PHP (php)

The glob() function takes two parameters:

The $pattern is the pattern to match. To construct a pattern, you use the following special characters:

  • Use * to match zero or more characters
  • Use - to match exactly one character
  • Use [] to match one character from a group of characters listed in the []. To negate the matching, you use the ! character as the first character in the group.
  • Use \ to escape the following characters, except when the GLOB_NOESCAPE flag is set.

The $flag is one or more options that determine the behavior of the glob() function.

For example, if the $flag is GLOB_MARK, the glob() function adds a slash (/) or backslash (\) to each matching directory. For a complete list of valid flags, check the glob() function documentation.

To combine flags, you use the | character. For example: GLOB_ONLYDIR|GLOB_NOSORT.

The glob() function returns an array that contains the matched files/directories.

If no files or directories match the pattern, the glob() function returns an empty array.

If an error occurs, the glob() function returns an false.

PHP glob() function examples

Let’s take some examples of using the PHP glob() function.

1) Using the PHP glob() function to list all files in a directory

The following example uses the glob() funtion to list all *.php file in the src directory:

<?php

$path = 'src/*.php';

$filenames = glob($path);

foreach ($filenames as $filename) {
    echo $filename . '<br>';
}Code language: PHP (php)

In this example, the pattern *.php matches any file whose extension is php.

2) Using the PHP glob() function to calculate get the total size of files

To get the total size of files in a directory which match a pattern, you use these steps:

  • First, find the matching files using the glob() function.
  • Second, get the size of each file by passing the result of the glob() function to the array_map() function.
  • Third, get the total size by passing the result of the array_map() to the array_sum() function.

The following code illustrates how to use the glob(), array_map(), and array_sum() function to find the total size of the *.php files in the src directory:

echo array_sum(array_map('filesize', glob('./src/*.php')));Code language: PHP (php)

3) Using the PHP glob() function to include the dotfiles

The glob(‘*’) ignores hidden files by default. This means that it doesn’t return the file whose name starts with a dot e.g., (.gitignore), which are known as dotfiles.

If you want to match the dotfiles, you can use the {.[!.],}* as the pattern with the GLOB_BRACE flag. This pattern excludes the directories . and ..:

$filenames = glob('{.[!.],}*', GLOB_BRACE); 
foreach ($filenames as $filename) {
    echo $filename . '<br>';
}Code language: PHP (php)

Summary

  • Use the PHP glob() function to get a list of files and directories that match a pattern.
Did you find this tutorial useful?