Ced
Ced

Reputation: 199

Best way to check if a dir is empty whith php

Is there a better way to check if a dir is empty than parsing it?

Upvotes: 5

Views: 2667

Answers (2)

Svish
Svish

Reputation: 158021

Don't think so. Shortest/quickest way I can think of is the following, which should work as far as I can see.

function dir_is_empty($path)
{
    $empty = true;
    $dir = opendir($path); 
    while($file = readdir($dir)) 
    {
        if($file != '.' && $file != '..')
        {
            $empty = false;
            break;
        }
    }
    closedir($dir);
    return $empty;
}

This should only go through a maximum of 3 files. The two . and .. and potentially whatever comes next. If something comes next, it's not empty, and if not, well then it's empty.

Upvotes: 9

KingCrunch
KingCrunch

Reputation: 131871

Not really, but you can try to delete it. If it fails, its not empty (or you just can't delete it ;))

function dirIsEmpty ($dir) {
  return rmdir($dir) && mkdir($dir);
}

Update:

It seems, that the answer, that takes the condition "without parsing" into account, doesn't find much friends ;)

function dirIsEmpty ($dir) {
  return count(glob("$dir/**/*")) === 0:
}

Note, that this assumes, that the directory and every subdirectory doesn't contain any hidden file (starting with a single .).

Upvotes: -1

Related Questions