Heim  >  Artikel  >  Backend-Entwicklung  >  请问一下这两段readdir循环的代码为什么会不一样呢?

请问一下这两段readdir循环的代码为什么会不一样呢?

WBOY
WBOYOriginal
2016-06-23 13:45:471051Durchsuche

前面一段只能取得一部分文件
$han2 = opendir('dir');
while ( readdir($han2) !== false) {
echo readdir($han2);
echo "
";
}
closedir($han2);

这一段可以取得全部文件
$od = opendir('dir');
while (($readd = readdir($od)) !== false) {
echo $readd;
echo "
";
}
closedir($od);


回复讨论(解决方案)

readdir 返回目录中下一个文件的文件名。
你的第一段代码只利用了一半的结果

dir中有a b c三个文件。前面一段while ( readdir($han2) !== false)运行完只会游标移到 a后面了,你在运行echo readdir($han2)只会读取到b。而后面一段 用变量接收,完全可以避免这个问题。

readdir 返回目录中下一个文件的文件名。
你的第一段代码只利用了一半的结果


我多问一句为什么在页面输出的时候会把当前目录(.)和上一级目录输出显示出来呢(..)
是哪个readdir额外的功能吗?

dir中有a b c三个文件。前面一段while ( readdir($han2) !== false)运行完只会游标移到 a后面了,你在运行echo readdir($han2)只会读取到b。而后面一段 用变量接收,完全可以避免这个问题。

谢谢。

. 和 .. 也是目录项,当然也会显示出来
如果不要的话,得判断一下


readdir 返回目录中下一个文件的文件名。
你的第一段代码只利用了一半的结果


我多问一句为什么在页面输出的时候会把当前目录(.)和上一级目录输出显示出来呢(..)
是哪个readdir额外的功能吗? 是PHP内核里面故意这么设计的吧,可能是调用C的readdir函数,C的readdir函数也是读取.和..的。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn