Списки каталогов PHP и удалить .. и

Я создал сценарий, который перечисляет каталоги в текущем каталоге

<?php $dir = getcwd(); if($handle = opendir($dir)){ while($file = readdir($handle)){ if(is_dir($file)){ echo "<a href=\"$file\">$file</a><br />"; } } ?> 

но проблема в том, что я вижу это «..» и «.». прямо над списками каталогов, когда кто-то нажимает на них, они перенаправляются на один уровень вверх по каталогам. Может кто-то сказать мне, как удалить эти «..» и «.». ?

Solutions Collecting From Web of "Списки каталогов PHP и удалить .. и"

Если вы используете функции opendir / readdir / closedir, вы должны проверить вручную:

 <?php if ($handle = opendir($dir)) { while ($file = readdir($handle)) { if ($file === '.' || $file === '..' || !is_dir($file)) continue; echo "<a href=\"$file\">$file</a><br />"; } } ?> 

Если вы хотите использовать DirectoryIterator , существует метод isDot ():

 <?php $iterator = new DirectoryIterator($dir); foreach ($iterator as $fileInfo) { if ($fileInfo->isDot() || !$fileInfo->isDir()) continue; $file = $fileinfo->getFilename(); echo "<a href=\"$file\">$file</a><br />"; } ?> 

Примечание. Я думаю, что продолжение может упростить этот тип циклов за счет уменьшения уровня отступов.

Или используйте glob :

 foreach(glob('/path/*.*') as $file) { printf('<a href="%s">%s</a><br/>', $file, $file); } 

Если ваши файлы не соответствуют шаблону расширения шаблона имени файла , используйте

 array_filter(glob('/path/*'), 'is_file') 

для получения массива (не скрытых) имен файлов.

Пропускает все скрытые и «точечные каталоги»:

 while($file = readdir($handle)){ if (substr($file, 0, 1) == '.') { continue; } 

Пропускает точечные каталоги:

 while($file = readdir($handle)){ if ($file == '.' || $file == '..') { continue; } 
 <?php if($handle = opendir($dir)){ while($file = readdir($handle)){ if(is_dir($file) && $file !== '.' && $file !== '..'){ echo "<a href=\"$file\">$file</a><br />"; } } } ?>