一尘不染

如何使用PHP检查目录是否为空?

php

我正在使用以下脚本读取目录。如果目录中没有文件,则应说空。问题是,即使里面有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";
?>

阅读 501

收藏
2020-05-29

共1个答案

一尘不染

似乎您需要的scandir不是glob,因为glob无法看到Unix隐藏文件。

<?php
$pid = basename($_GET["prodref"]); //let's sanitize it a bit
$dir = "/assets/$pid/v";

if (is_dir_empty($dir)) {
  echo "the folder is empty"; 
}else{
  echo "the folder is NOT empty";
}

function is_dir_empty($dir) {
  if (!is_readable($dir)) return NULL; 
  return (count(scandir($dir)) == 2);
}
?>

请注意,这段代码并不是效率的最高峰,因为不必仅知道目录是否为空就读取所有文件。因此,更好的版本是

function dir_is_empty($dir) {
  $handle = opendir($dir);
  while (false !== ($entry = readdir($handle))) {
    if ($entry != "." && $entry != "..") {
      closedir($handle);
      return FALSE;
    }
  }
  closedir($handle);
  return TRUE;
}

顺便说一句,不要使用 单词 来代替 布尔 值。后者的目的是告诉您是否有空。一个

a === b

表达式已经返回EmptyNon Empty使用了编程语言,FALSE或者TRUE分别返回了-
因此,您可以在IF()没有任何中间值的控件结构中使用结果

2020-05-29