PHP - перебирать папки и отображать содержимое HTML - PullRequest
1 голос
/ 05 мая 2010

В настоящее время я пытаюсь разработать метод, чтобы получить обзор всех моих различных веб-шаблонов, которые я создал и (легально) загрузил за последние годы. Я думал о том, чтобы отобразить их как WordPress - это предварительный просмотр его шаблонов с небольшим окном предварительного просмотра, отображение конкретного файла со стилями и всем прочим.

Как мне разделить их на строки и столбцы и создать Ajax модальное окно, открытое при предварительном просмотре и разбивке на страницы и т. Д.

Я думаю, что могу справиться, но сама концепция заключается в том, чтобы перебрать несколько папок, а затем найти все страницы index.htm и index.html и отобразить их.

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

Есть ли сценарий, функция, фрагмент или просто какая-то информация для создания такой (возможно, простой) функции предварительного просмотра?

1 Ответ

1 голос
/ 05 мая 2010

glob('*.html') будет работать, если все они находятся в одном каталоге.

Если вы хотите пройтись по дереву файлов - проверяя все в текущем каталоге, а также в подкаталогах и подкаталогах подкаталогов (и т. Д.), - у вас есть несколько вариантов.

Можно использовать команду unix find с одним из методов вызова системы PHP. Что-то вроде:

find <search_root_dir> -name "*.html" -print</p> <p>will get you output that looks something like</p> <pre><code>search_root_dir/blah.html search_root_dir/foo.html search_root_dir/subdir/baz.html search_root_dir/subdir/bah.html ...

Еще одна вещь, которую вы можете сделать, это написать рекурсивную функцию, которая использует chdir и readdir или, возможно, scandir, что-то вроде:

function dir_walk($start_dir,$func) {
    $entries = scandir($start_dir);
    foreach($entries as $entry) {
        if($entry == '.' || $entry == '..') {
            /*skip these*/
        } else if(is_dir($entry)) {
            dir_walk($start_dir.'/'.$entry,$func);
        } else $func($start_dir.'/'.$entry);
    }
}

Затем напишите другую функцию:

$html_files = array();
function record_html_files($filename) {
   global $html_files;
   if(strpos($filename,'*.html') === (strlen($filename) - 6))
     $html_files[] = $filename;
}

И назовите это так:

dir_walk('/path/to/search/root','record_html_files');
</code>

Или напишите dir_walk, чтобы он принимал объект с вызовом метода, который вы можете сделать внутри. Здесь возможны некоторые варианты.

...