当前位置: 首页 > 面试题库 >

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

钱华晖
2023-03-14
问题内容

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

问题答案:

似乎您需要的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()没有任何中间值的控件结构中使用结果



 类似资料:
  • 问题内容: 将为空或以逗号分隔的列表(或单个值)。检查它是否为空的最简单方法是什么?我假设只要将数组提取到?中就可以这样做。在这种情况下,跳过展开是否为空可能会更有效,但是出于参数的考虑,我将如何检查数组是否也为空? 问题答案: 如果只需要检查数组中是否有任何元素 如果您需要在检查之前清除空值(通常是为了防止产生奇怪的字符串):

  • 问题内容: 如何检查C语言在Linux上是否存在目录? 问题答案: 您可以使用并检查是否失败:

  • 我正在构建一个对Azure AD进行OAUTH身份验证的Web应用程序。我的意思是,您通过您的Azure AD/Office e365帐户登录我的应用程序。登录成功后,我将Azure AD用户的GUID与我的Mysql数据库中的用户匹配。我在用户登录的会话信息中设置。 我使用这个howto作为它的基础:https://kv AES . WordPress . com/2016/10/21/azur

  • 问题内容: 我想检查服务器端是否对我的php页面的请求是ajax请求。 我看到了两种方法可以做到这一点: 第一种方法:在请求中发送一个参数,该参数告诉页面这是AJAX请求(= ) mypage.php: 第二种方式:将标头设置为: 客户端js: mypage.php: 事实是,这两种方法很容易被黑,因此检查我是否收到这样的AJAX请求并不安全。 如何检查我是否收到AJAX请求? 问题答案: 没有确

  • 如何检查一个给定的文件是否在另一个文件下?例如,我有< code>new Paths.get("/foo/bar/" 和< code > new paths . get("。/abc/def.jar")。我想检查第二个是否在< code>/foo/bar下。 我可以找出一些基于字符串的比较,比如< code>path.toFile()。getAbsolutePath()。startsWith(pa

  • 问题内容: 我在用 我想用bash脚本检查一下,看看是否已挂载?如果不是,则调用上面的mount命令,否则执行其他操作。我怎样才能做到这一点? CentOS是操作系统。 问题答案: 运行不带参数的命令将告诉您当前的安装。在shell脚本中,您可以使用和if语句检查挂载点: 在我的示例中,if语句正在检查的退出代码,该代码指示是否存在匹配项。由于我不希望在匹配时显示输出,因此将其重定向到。