Обработчик Apache для шаблонизатора
Так как шаблонизатор должен запускаться при обращении к любой странице на сервере, для него придется написать обработчик. Я привожу здесь его код без дополнительных пояснений, поскольку он практически полностью аналогичен тому коду, который мы рассматривали в главе 29.
Листинг 30.13. Обработчик шаблонизатора: TemplateHandler.php
<?
// Проверяем, не пытается ли пользователь запустить обработчик
// напрямую, минуя Apache.
$FileName=strtr(__FILE__,"\\","/");
$ReqName=ereg_Replace("\\?.*","",strtr(getenv("REQUEST_URI"),"\\","/"));
if(eregi(quotemeta($ReqName),$FileName)) {
// Выводим сообщение об ошибке.
include "TemplateHandler.err";
// Записываем в журнал данные о пользователе.
$f=fopen("TemplateHandler.log","a+");
fputs($f,date("d.m.Y H:i.s")." $REMOTE_ADDR — Access denied\n");
fclose($f);
// Завершаем работу.
exit;
}
// Все в порядке — корректируем переменные окружения в соответствии
// с запрошенным пользователем адресом.
@putenv("REQUEST_URI=".
$GLOBALS["HTTP_ENV_VARS"]["REQUEST_URI"]=
$GLOBALS["REQUEST_URI"]=
getenv("QUERY_STRING")
);
@putenv("QUERY_STRING=".
$GLOBALS["HTTP_ENV_VARS"]["QUERY_STRING"]=
$GLOBALS["QUERY_STRING"]=
ereg_Replace("^[^?]*\\?","",getenv("QUERY_STRING"))
);
// Подключаем библиотекаря.
$INC[]=getcwd();
include "Librarian.phl";
// Переходим в каталог со страницей.
chdir(dirname($SCRIPT_FILENAME));
// Загружаем шаблонизатор.
Uses("Template");
// Выводим содержимое главного блока страницы.
echo RunUrl($SCRIPT_NAME);
?>