Как вывести список каталогов, подкаталогов и всех файлов в Stack Overflow

Я хочу иметь возможность перечислить все каталоги, подкаталоги и файлы в папке «./», т.е. в папке проекта с именем fileSystem, которая содержит этот файл php scanDir.php.

Вы можете просмотреть систему каталогов, которую я получил здесь:
введите описание изображения здесь

Через минуту он вернет только папки / файлы подкаталога в корне каталога mkdir, но не все папки внутри этого подкаталога.

Как изменить код так, чтобы он демонстрировал все файлы, каталоги, подкаталоги и их файлы и подкаталоги в папке fileSystem, учитывая, что запускаемый файл php называется scanDir.php, а код для этого представлен ниже.
Вот код php:

 $path = "./";

if(is_dir($path))

{
$dir_handle = opendir($path);

//extra check to see if it's a directory handle.
//loop round one directory and read all it's content.
//readdir takes optional parameter of directory handle.
//if you only scan one single directory then no need to passs in argument.
//if you are then going to scan into sub-directories the argument needs
//to be passed into readdir.
while (($dir = readdir($dir_handle))!== false)
{
if(is_dir($dir))
{
echo "is dir: " . $dir . "<br>";


if($dir == "mkdir")
{
$sub_dir_handle = opendir($dir);
while(($sub_dir = readdir($sub_dir_handle))!== false)
{
echo "--> --> contents=$sub_dir <br>";
}
}



}
elseif(is_file($dir))
{
echo "is file: " . $dir . "<br>"  ;
}
}
closedir($dir_handle); //will close the automatically open dir.
}

else {

echo "is not a directory";
}

1

Решение

использование ScanDir чтобы увидеть все вещи в каталоге и is_file чтобы проверить, является ли элемент файлом или следующим каталогом, если это каталог, повторите одно и то же снова и снова.

Итак, это совершенно новый код.

function listIt($path) {
$items = scandir($path);

foreach($items as $item) {

// Ignore the . and .. folders
if($item != "." AND $item != "..") {
if (is_file($path . $item)) {
// this is the file
echo "-> " . $item . "<br>";
} else {
// this is the directory

// do the list it again!
echo "---> " . $item;
echo "<div style='padding-left: 10px'>";
listIt($path . $item . "/");
echo "</div>";
}
}
}
}

echo "<div style='padding-left: 10px'>";
listIt("/");
echo "</div>";

Вы можете увидеть живое демо здесь на моем веб-сервере, кстати, я буду держать эту ссылку только на секунду

Когда вы видите «->» это файл, а «->» это каталог

Чистый код без HTML:

function listIt($path) {
$items = scandir($path);

foreach($items as $item) {
// Ignore the . and .. folders
if($item != "." AND $item != "..") {
if (is_file($path . $item)) {
// this is the file
// Code for file
} else {
// this is the directory
// do the list it again!
// Code for directory
listIt($path . $item . "/");
}
}
}
}

listIt("/");

демоверсия может занять некоторое время для загрузки, в ней много элементов.

3

Другие решения

В PHP есть несколько мощных встроенных функций для поиска файлов и папок, лично мне нравится recursiveIterator семья классов.

$startfolder=$_SERVER['DOCUMENT_ROOT'];
$files=array();


foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $startfolder, RecursiveDirectoryIterator::KEY_AS_PATHNAME ), RecursiveIteratorIterator::CHILD_FIRST ) as $file => $info ) {
if( $info->isFile() && $info->isReadable() ){
$files[]=array('filename'=>$info->getFilename(),'path'=>realpath( $info->getPathname() ) );
}
}

echo '<pre>',print_r($files,true),'</pre>';
1

По вопросам рекламы [email protected]