Я пытаюсь использовать рекурсивный итератор каталогов PHP для поиска файлов php и html, чтобы перечислить их по дате. Код используется следующим образом:Как сделать только выбранные папки с помощью Итератора PHP?
$filelist = array();
$iterator = new RecursiveDirectoryIterator($this->_jrootpath);
foreach(new RecursiveIteratorIterator($iterator) as $file) {
if (!$file->isDir()) {
if (preg_match("/.(html|htm|php)$/", $file->getFilename())) {
$filelist[$file->getPathname()] = $file->getMTime();
}
}
}
arsort($filelist);
foreach ($filelist as $key => $val) {
$resultoutput .= ' <tr>
<td class="filepath">'.$key.'</td>
<td class="filedate">'.date("d-m-Y H:i:s",$val).'</td>
</tr>';
}
Вышеприведенные работает, но мне нужно, чтобы ограничить итерацию к определенным папкам. Этот скрипт начнется в родительской папке, где я ожидаю, что некоторые подпапки, такие как «администратор», «компоненты», «модули», «плагины» и «шаблоны» (другими словами, стандартные папки установки Joomla). Я также ожидаю несколько файлов в родительской папке, например «index.php». Эти файлы и папки должны быть повторены (честно говоря, пишу это, я не уверен, что сама родительская папка повторяется моим кодом!). Однако возможно, что родительская папка также содержит другие подпапки, которые не должны повторяться. Это могут быть подпапки для поддоменов или доменов аддонов, названных, например, «mysub» и «myaddon.com». Есть две причины, по которым я хочу пропустить любую папку, кроме обычных установочных папок Joomla. Во-первых, мне не нужно знать о файлах в других папках. Более того, повторение всех папок может занять столько времени и ресурсов, что я получаю 500 страниц ошибок.
Мой вопрос в том, как лучше всего изменить свой код, чтобы убедиться, что правые папки исключены из итерации и включены в нее? Я видел примеры итератора в Интернете, проверяющие имя каталога, но это не помогает мне, потому что мне нужно только проверить имена папок второго уровня (что означает только вложенную папку высшего уровня в пути, таком как parent/secondlevel/noneedtocheck /file.php).
Это может быть лучшим решением, но я действительно не хорошо ни с регулярное выражение или экспериментирование с почти недокументированными классами. Кажется, что итераторы - это мощные инструменты, но комментарии пользователя с хорошими примерами все еще отсутствуют в руководстве. –
У вас есть регулярное выражение в вашем примере кода. Думаю, это, вероятно, сработает. Else, я хотел бы помочь вам;) – Franz
Спасибо! Это регулярное выражение было высотой моего достижения. Мне удалось заставить его работать с кодом, который я опубликовал, но я хотел бы знать, как это сделать лучше с помощью regexiterator - после этого я хорошо пишу код, чтобы узнать. Я озадачен тем, как это будет выбирать правильный уровень папки для проверки, но я полагаю, что хорошее регулярное выражение будет иметь дело с этим. –