我正在使用以下脚本读取目录。如果目录中没有文件,则应说空。问题是,即使里面有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隐藏文件。
scandir
<?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
表达式已经返回Empty或Non Empty使用了编程语言,FALSE或者TRUE分别返回了- 因此,您可以在IF()没有任何中间值的控件结构中使用结果
Empty
Non Empty
FALSE
TRUE
IF()