САМОУЧИТЕЛЬ PHP 4




Разделенные вычисления - часть 2


Напишем функцию WalkSite(), которая будет заниматься поиском и обработкой файлов на каждом этапе обхода сайта. Листинг 33.1 содержит код библиотеки,  в которой описана эта функция. Чтобы не "привязываться" к специфике конкретной задачи, сделаем функцию универсальной. Будем передавать ей имя процедуры-обработчика, умеющего "вытаскивать" из указанного файла всю информацию, необходимую для построения карты (например, название страницы, ее размер и т. д.),

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

Листинг 33.1. Библиотека для обхода дерева сайта: SiteWalker.phl

<?

// Функция выполняет один этап обхода всех каталогов и файлов сайта.

// Если обход нужно продолжить, загружается предыдущее состояние

// из файла $cache. Если этого файла не существует, значит,

// необходимо начать новый обход, начиная с каталога $Root.

// Этап будет длиться не более $time секунд (если 0, то за один

// раз обрабатывается ровно один файл или каталог).

// Для каждого обнаруженного файла или каталога вызывается функция,

// имя которой передано в $Func.

// Формат функции: function FWalker(string $fname, array &$Result)

// Эта функция должна обрабатывать найденный файл $fname

// соответствующим образом и добавлять данные в массив $Result

// (в любом формате). Состояние массива $Result будет автоматически

// сохранено сразу по истечении кванта времени и восстановлено

// перед началом нового этапа.

// Возвращает true, если процесс не был закончен на этом этапе,

// и false, если только что были обработаны последние файлы на сервере.

function WalkSite($Root,$Func,$cache,$time,&$Result)




Содержание  Назад  Вперед