下面的代码需要读取目录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'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';
?>
答案 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
目录的用户,设置了哪些权限?