如何去除PHP目录遍历结果中的点(.和..)?
解决PHP遍历目录时显示.和..的问题
嘿,这个问题其实挺常见的——.和..是文件系统里的特殊目录项(.代表当前目录,..代表上级目录),readdir()默认会把它们返回出来。你只需要在输出之前加个判断,把这两个特殊项跳过就行,给你改好的代码:
<?php $map = opendir('file'); while ($bestand = readdir($map)) { // 跳过.和..这两个特殊目录 if ($bestand !== '.' && $bestand !== '..') { echo "<a href='file/$bestand'>$bestand</a><br/>"; } } closedir($map); ?>
关键说明:
- 核心就是加了
if ($bestand !== '.' && $bestand !== '..')这个判断,只有当当前项不是这两个特殊目录时,才执行输出操作。 - 这里用
!==(严格不等于)是为了避免类型匹配的问题,虽然用!=也能工作,但严格比较更严谨。
如果你想换一种更简洁的写法,也可以用scandir()函数,它会直接返回目录里的所有项数组,然后用array_diff()去掉.和..:
<?php $files = scandir('file'); // 移除特殊目录项 $filteredFiles = array_diff($files, ['.', '..']); foreach ($filteredFiles as $bestand) { echo "<a href='file/$bestand'>$bestand</a><br/>"; } ?>
两种方法都能解决你的问题,看你习惯哪种写法啦~
内容的提问来源于stack exchange,提问作者Rickjeh
相关产品推荐
相关产品推荐

