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




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


    $f=fopen($cache,"a+b");

    flock($f,LOCK_EX);

    ftruncate($f,0);

    fwrite($f,Serialize($Prg));

    fflush($f); fclose($f);

    return true; // процесс продолжается

  }

  // Иначе процесс закончился. Удалить файл состояния.

  @unlink($cache);

  return false;

}

?>

Я не буду приводить здесь реальный сценарий для построения карты сервера, потому что он слишком велик и, к тому же, довольно однообразен и неинтересен. Вся "изюминка" заключена именно в функции WalkSite(). Листинг 33.2 содержит небольшую "демонстрацию" ее возможностей. Сценарий собирает сведения о размере каждого файла сайта, печатая на каждом этапе имена обработанных объектов, а затем выводит сводную информацию.

Листинг 33.2. Демонстрация возможностей функции WalkSite(): demo.php

<?

// Подключаем библиотекаря "прямым" способом.

include "$DOCUMENT_ROOT/php/Librarian.phl";

// Подключаем модуль с функцией WalkSite().

Uses("SiteWalker");

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

// Ее задача — добавить обработанные данные из этого файла

// в массив $Result (формат определяется назначением этих данных).

function Walk($fname,&$Result)

{ // для диагностики выводим имя файла

  print ">$fname<br>";

  // в качестве примера — просто добавляем имя файла в массив

  $Result[]="$fname: <b>".filesize($fname)."</b>";

}

// Если WalkSite() вернула false, значит, процесс закончился.

if(!WalkSite($DOCUMENT_ROOT,"Walk","map",0,$Result)) {

  // В качестве примера просто выводим содержимое массива,

  // сформированного вызовами функции Walk(). Реальный код

  // должен был бы вырабатывать HTML-представление карты,

  // данные которой накоплены в $Result.

  print "<hr>";

  print join("<br>\n",$Result); 

} else {

  // для примера заставляем страницу обновить саму себя,

  // имитируя многократные посещения пользователей.




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