Чтение файловой структуры в массив, но только определенные файлы - PullRequest
0 голосов
/ 11 января 2011

У меня есть структура каталогов, которая выглядит следующим образом:

/expandables 
- folder
- folder
- folder
- folder 
  - BannerInfo.txt
  - index.html

Каждый из folder имеет одинаковую структуру.Один файл с именем BannerInfo.txt и index.html.Если это имеет значение, существует около 250 таких папок.

Я хочу пройтись по этим папкам и сохранить каждый из файлов index.html в массив.Внутри файла index.html находится простой HTML и Javascript, который я хочу прочитать в строку, которая будет отображаться позже.

Я борюсь с тем, как отфильтровать только index.html файл из отдельных папок.

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

Есть идеи?

РЕДАКТИРОВАТЬ:

Я придумал что-то вроде этого:

<?

    $expandables = array();

    $expandables = scandir("expandables/");

    $count = 0;

    foreach($expandables as $expandable) {
        if ($expandable != "." && $expandable != "..") {
            $expandableCode = "expandables/" . $expandable . "/index.html";

            // get value of index.html for select list
            $expandableValue = file_get_contents($expandableCode);


            // echo out options
            echo "<option value='$expandableValue'>$expandable</option>";

        }
    }       



?>

Но это не совсем правильно работает.Есть ли способ динамически заполнить мою текстовую область содержимым index.html после того, как я выберу его из окна выбора?

1 Ответ

1 голос
/ 11 января 2011

Вы можете использовать readdir() или scandir(), чтобы получить содержимое каждого каталога (то есть имена файлов). Используйте is_dir(), чтобы проверить, является ли найденный элемент файлом или каталогом. Если это каталог, повторите процесс для этого каталога. Если это файл, проверьте, является ли он 'index.html', и если да, вставьте в массив.

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

Обход каталога может быть достаточно проблематичным, поэтому лучше также кэшировать этот список.

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

Если вы сохраните этот массив как код PHP, вы можете включить его. Это даст вам еще большую производительность, если вы получите кеш PHP, такой как APC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...