Код, который вы опубликовали, может иметь проблемы, потому что scandir
возвращает только имя файлов и папок, а не их абсолютный путь.
Когда вы позже используете is_dir
, вы передаете только имя файла / папки (относительный путь).При этом в соответствии с документацией
Если имя файла является относительным именем файла, оно будет проверено относительно текущего рабочего каталога.
Вы можете исправить свой код, передав правильный путь к is_dir
is_dir("$path/$el")
Чтобы это решение работало $path
не должнозавершающий слеш (потому что мы делаем добавляем его).
Более того, $path
должен быть либо абсолютным путем к целевому каталогу, либо путем к целевому каталогу относительный в рабочий каталог, скрипт запускается.
Наконец, чтобы сначала перечислить папки, затем файлы, вы можете отсортировать массив или, проще говоря, сделать два цикла foreach
следующим образом:
function get_items($path){
$arr = scandir($path);
$arr = array_slice($arr, 2);
sort($arr);
// Folders first
foreach($arr as $el){
if(is_dir("$path/$el")){
echo "<div class='folder'>" . $el . "</div>\n";
}
}
// Then files
foreach($arr as $el){
if( ! is_dir("$path/$el")){
echo "<div class='file'>" . $el . "</div>\n";
}
}
}