Как я могу использовать PHP, чтобы проверить, является ли каталог пустым? - PullRequest
68 голосов
/ 21 сентября 2011

Я использую следующий скрипт для чтения каталога.Если в каталоге нет файла, он должен быть пустым.Проблема в том, что он просто говорит, что каталог пуст, даже если внутри находятся файлы ARE, и наоборот.

<?php
$pid    =       $_GET["prodref"];
$dir    =       '/assets/'.$pid.'/v';
$q     =        (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';

    if ($q=="Empty")
        echo "the folder is empty"; 
    else
        echo "the folder is NOT empty";
?>

Ответы [ 14 ]

0 голосов
/ 08 июня 2018

Первый вопрос: когда каталог пуст? В каталоге есть 2 файла '.' а также '..'.
Рядом с этим на Mac может быть файл .DS_Store. Этот файл создается при добавлении какого-либо контента в каталог. Если эти 3 файла находятся в каталоге, вы можете сказать, что каталог пуст. Итак, чтобы проверить, является ли каталог пустым (без проверки, является ли $ dir каталогом):

function isDirEmpty( $dir ) {
  $count = 0;
  foreach (new DirectoryIterator( $dir ) as $fileInfo) {
     if ( $fileInfo->isDot() || $fileInfo->getBasename() == '.DS_Store' ) {
        continue;
     }
     $count++;
  }
  return ($count === 0);
}
0 голосов
/ 06 марта 2017

Вы можете использовать это:

function isEmptyDir($dir)
{
    return (($files = @scandir($dir)) && count($files) <= 2);
}
0 голосов
/ 08 августа 2015

У меня недавно была похожая проблема, хотя ответ с наибольшим количеством голосов не помог мне, поэтому мне пришлось придумать подобное решение. и опять же, возможно, это не самый эффективный способ решения проблемы,

Я создал такую ​​функцию

function is_empty_dir($dir)
   {
       if (is_dir($dir))
       {
            $objects = scandir($dir);
            foreach ($objects as $object)
            {
                if ($object != "." && $object != "..")
                {
                    if (filetype($dir."/".$object) == "dir")
                    {
                         return false;
                    } else { 
                        return false;
                    }
                }
            }
            reset($objects);
            return true;
       }

и использовал его для проверки наличия пустого каталога, как это было

if(is_empty_dir($path)){
            rmdir($path);
        }
0 голосов
/ 01 августа 2014

Я использую этот метод в моем плагине WordPress CSV 2 POST.

    public function does_folder_contain_file_type( $path, $extension ){
        $all_files  = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) );

        $html_files = new RegexIterator( $all_files, '/\.'.$extension.'/' );  

        foreach( $html_files as $file) {
            return true;// a file with $extension was found
        }   

    return false;// no files with our extension found
}

Он работает с определенным расширением, но его легко изменить в соответствии с вашими потребностями, удалив строку "new RegexIterator (". Count $ all_files.

    public function does_folder_contain_file_type( $path, $extension ){
        $all_files  = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) );

        return count( $all_files );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...