为什么当我使用PHP使用scandir时我会得到额外的值
$portID = $this->id;
$dir = '/home/sites/mydomain.com/public_html/public/images/'.$portID;
$contents = scandir($dir);
是否有一些我不了解的函数产生的值多于文件夹中的实际值?
答案 0 :(得分:3)
这是使用opendir
的替代方案$dir = "/your/path";
if (is_dir($dir)) {
if ($d = opendir($dir)) {
while (($file = readdir($d)) !== false) {
if ( $file != "." && $file != ".." ){
echo "filename: $file \n";
$files[]=$file;
}
}
closedir($d);
}
}
如果你坚持使用scandir(),那么使用循环来浏览scandir()返回的文件数组,然后从数组中删除那些你不想要的文件
答案 1 :(得分:1)
我没有足够的代表来评论只是某人的答案,所以这必须在一个单独的答案中。从PHP 5.3开始,FilesystemIterator扩展了DirectoryIterator并默认跳过了点文件。
答案 2 :(得分:1)
这是摆脱点和不必要的文件或目录的最简单方法。
// remove unnecessary dots etc
$result = array_diff(scandir('/dir/to/scan/'), array('.', '..', '.DS_Store'));
print_r($result);
希望这有帮助。谢谢!
答案 3 :(得分:0)
虽然没有scandir()的实际输出很难分辨,但我猜你的意思是额外的.
和..
条目。
它们也出现在manual的示例中。您必须手动过滤掉它们。
.
指的是当前目录
..
指的是父目录。
这个传统来自Unix世界,在这个历史上,我不知道。我想这是因为它允许您在ls
的每次调用中快速查看当前目录和父目录的权限。
答案 4 :(得分:0)
class DirectoryFilterDots extends RecursiveFilterIterator
{
function __construct($path)
{
parent::__construct(new RecursiveDirectoryIterator($path));
}
function accept()
{
return !$this->getInnerIterator()->isDot();
}
function key()
{
return $this->getInnerIterator()->getPathname();
}
}