Рассмотрим пример сценария, использующего библиотекарь в своей работе. Мы будем предполагать, что все модули размещены в подкаталоге /lib основного каталога с Web-документами (если вы заметили, такой каталог уже есть в путях поиска модулей по умолчанию, "зашитых" в библиотекаре).
Пока мы будем подключать библиотекаря явно— инструкцией include. Конечно, это не очень удобно. Очень скоро мы узнаем, как избавиться от указанного недостатка.
Пусть сценарию требуется библиотека files.phl, которую мы написали (или где-то достали, хотя модули для PHP все еще большая редкость), и которая содержит некоторые функции для работы с файлами.
Кстати, модулю files.phl
самому могут понадобиться некоторые модули. Если это так, нет проблем: достаточно лишь поставить вызов Uses()
внутрь кода библиотеки.
Листинг 29.2. Тестовый сценарий
<?
include "$DOCUMENT_ROOT/lib/librarian.phl"; // подключаем библиотекарь
Uses("files"); // подключаем модуль files.phl
// Все — теперь можно использовать модуль
$Content=ReadAllFile("myfile.txt"); // читаем весь файл myfile.txt
$Hash=ReadKeyValFile("keyval.txt"); // читаем файл формата key=value
// ... и другие функции, которые, возможно, присутствуют в модуле
?>
Как видите, ничего сложного. Давайте теперь посмотрим, как выглядит модуль files.phl.
Листинг 29.3. Пример модуля files.phl
<?
// Внимание! Так указывается дополнительный каталог для поиска модулей.
// Запись означает, что библиотекарь должен искать модули также и в
// подкаталоге OtherModules/dk текущего каталога
$INC[]="OtherModules/dk";
// Подключение каких-то других модулей, в которых нуждается files.phl
Uses("SomeOtherModule");
Uses("AndOtherModuleToo");
// Константа: символы перевода строки
define("CRLF",getenv("COMSPEC")?"\r\n":"\n");
// Читает все содержимое файла $fname и возвращает его
function ReadAllFile($fname)
{ $f=fopen($fname,"r"); if(!$f) return "";
$Cont=fread($f,1000000); fclose($f);
return $Cont;
}
// Читает файл $fname, строки которого имеют формат
// ключ1=значение1
// Возвращает ассоциативный массив с указанными в файле ключами
function ReadKeyValFile($fname)
{ $Cont=@File($fname); if(!@is_array($Cont)) return array();
$Hash=array();
foreach($Cont as $i=>$st) {
if(!ereg("^([^=]+)=(.*)",$st,$regs)) continue;
$Hash[trim($regs[1])]=trim($regs[2]);
}
return $Hash;
}
?>