Я все еще оставляю галочку для решения seegee, и я бы оставил комментарий ниже для небольшой поправки к его решению.
Его решение маскирует каталоги (. И ..), но не маскирует скрытые файлы, такие как .htaccess
Небольшая настройка решает проблему:
foreach(new DirectoryIterator($curDir) as $fileInfo) {
//Check for something like .htaccess in addition to . and ..
$fileName = $fileInfo->getFileName();
if(strlen(strstr($fileName, '.', true)) < 1) continue;
echo "<h3>" . $fileName . "</h3>";
}