PHP Просмотр файлов и каталогов

Я видел некоторые похожие проблемы, но это было не совсем то, что я искал. Я ищу лучший способ перемещения по файлам и каталогам, чем в приведенном ниже коде:

$currentdir = (isset($_GET['current']) && !empty($_GET['current'])) ? $_GET['current'] : '.';

if(!file_exists($currentdir)) {
echo "There is no such directory (".$currentdir.")";
$currentdir = '.';
}

$dirs = [];
$others = [];

foreach (new DirectoryIterator($currentdir) as $fileInfo) {
if($fileInfo->isDot()) continue;
if($fileInfo->isDir()) {
array_push($dirs, $fileInfo->getFilename());
} else {
array_push($others, $fileInfo->getFilename());
}
}

echo("<h3>Directories:</h3>");
foreach($dirs as $dir) {
echo "<a href='?current=$dir'>".$dir."</a><br>";
}

echo("<h3>Files:</h3>");
foreach($others as $other) {
$mod_date=date("d/m/Y H:i", filemtime($other));
$size = filesize($other);

echo "$other $mod_date $size<br>";
}

То, чего я хочу достичь в будущем, — это возможность перемещаться по каталогам (что означает, что мне нужен полный путь к ним) и возможность выполнять с ними некоторые основные действия — копировать, читать и т. Д. предложить мне хороший способ сделать это, может быть, рамки?

Кроме того, в этом коде перемещение по подкаталогам не проходит хорошо. Должен ли я где-то хранить путь к родительскому каталогу или просто переписать его совершенно другим способом?

-1

Решение

Вот подсказка: когда вы пересекаете иерархию (например, файловую систему) и заранее не знаете, сколько уровней подкаталогов может быть, вам нужен так называемый рекурсивный алгоритм. То есть функция, которая вызывает сама себя. Вот так (псевдокод):

function listAllFilesInTree($dirname) {
moveToDirectory($dirname) ;
$listing = getDirectoryListingAsArray(".") ;
foreach ($listing as $item){
if ($item.type = "dir")
listAllFilesInTree ($item.name) ;
else
$filelist[] = $item.fullyQualifiedName ;
}
moveToPreviousDirectory();
}

Обратите внимание, как, если он находит subdir, он просто вызывает себя, чтобы иметь дело с subdir. Когда он перестает находить подкаталоги, рекурсия сворачивается, оставляя $ filelist со списком всех файлов в дереве, независимо от того, насколько глубоко дерево было. Если вы ищете «рекурсия» или «рекурсивный» на SO, вы найдете около миллиона других сообщений на эту тему.

1

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

Других решений пока нет …

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