Я создал сценарий, который перечисляет каталоги в текущем каталоге
<?php $dir = getcwd(); if($handle = opendir($dir)){ while($file = readdir($handle)){ if(is_dir($file)){ echo "<a href=\"$file\">$file</a><br />"; } } ?>
но проблема в том, что я вижу это «..» и «.». прямо над списками каталогов, когда кто-то нажимает на них, они перенаправляются на один уровень вверх по каталогам. Может кто-то сказать мне, как удалить эти «..» и «.». ?
Если вы используете функции 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 />"; } } } ?>