PHP代码总是告诉我该目录不是空的

时间:2015-02-07 15:41:38

标签: php

下面的代码需要读取目录uploads /但他总是告诉我该目录不是空的,即使它 是空的。

<?php
  $dir = "uploads/";
  echo (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';
?>

此代码或其他内容是否有错误,或者我只是疯了?

更新代码

<?php
  echo (count(glob("uploads/*")) === 0) ? 'Empty' : 'Not empty';
?>

完整页面代码更新

<?php
if (array_key_exists('error', $_GET)) {
    echo '<div class="galleryError">That image could not be found, we&#39;re sorry!</div>';
} elseif (array_key_exists('unknownerror', $_GET)) {
    echo '<div class="galleryError">There went something wrong</div>';
} else {
    echo '';
}

if ($handle = opendir('uploads/')) {

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != "..") {

            echo "<div class='imgbox'><a href='fullscreen.php?token=$entry'><img src='$submap$gallery$entry' class='boximg'></a><p class='boxname'>$entry<br /><a href='?view&token=$entry'><small>View this image</small></a></p></div>";
        }
    }

    closedir($handle);
}

//以上所有内容都有效,但我们在这里有这个孤独的代码,拒绝工作。

echo (count(glob("uploads/*")) == 0) ? 'Empty' : 'Not empty';
?>

1 个答案:

答案 0 :(得分:0)

glob默默地失败了。我无法告诉你为什么,文件系统访问它通常与权限相关但可能还有其他因素 - 它甚至在文档中说该功能部分取决于你的服务器环境......

  

在某些系统上,无法区分空匹配和错误。

如果出现glob错误,则会返回false - 和count(false) === 1(也会记录在案),因此当他们忽略这些错误时,他们会遇到令人困惑的情况检查。如果您真的不关心错误,可以使用简写三元运算符进行内联错误检查,确保数组始终传递给count,以便它按预期运行:

$isEmpty = count(glob("uploads/*")?:[]) === 0;

这仍然没有解决目录未被读取的事实 - 当你在目录中有文件时,你是否尝试打印glob的输出?我想象一下也是这样。以下是什么印刷品? :

var_dump(is_readable('./uploads'));

以下输出是否与预期的工作目录相匹配? :

echo realpath('uploads');

FYI 在调试时使用var_dump,而不是评论中建议的print_r - 它将为您提供有关变量/类型/结构/参考等的更多详细信息。你真的需要。


总结 - 需要考虑的事项:

服务器上运行的 OS 是什么?运行 PHP 的模式是什么?它是在SuPHP / FastCGI或类似环境下运行的。用户拥有./uploads目录的用户,设置了哪些权限?