我正在使用以下脚本来读取目录。如果目录中没有文件,它应该说是空的。问题是,它只是一直说目录是空的,即使里面有文件,反之亦然。
<?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;
}
顺便说一句,不要使用 words 代替 boolean 值。后者的目的是告诉您某物是否为空。一个
a === b
表达式在编程语言方面已经返回 Empty
或 Non Empty
,分别为 false
或 true
- 所以,您可以在 IF()
等控制结构中使用结果,而无需任何中间值
关于php - 如何使用 PHP 检查目录是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497733/