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



         

Обработчики Apache - часть 5


$FileName=strtr(__FILE__,"\\","/");

$ReqName=ereg_Replace("\\?.*","",strtr(getenv("REQUEST_URI"),"\\","/"));

if(eregi(quotemeta($ReqName),$FileName)) {

  // Выводим сообщение об ошибке

  include "libhandler.err";

  // Записываем в журнал данные о пользователе

  $f=fopen("libhandler.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"))

);

// Подключаем библиотекарь

include "librarian.phl";

   // Здесь можно выполнить еще какие-нибудь действия...

   // . . .

// Запускаем тот сценарий, который был запрошен пользователем

chdir(dirname($SCRIPT_FILENAME));

include $SCRIPT_FILENAME;

?>

Ну и, конечно, какая же программа обходится без вывода диагностических сообщений? Наш пример подгружает файл libhandler.err в случае "жульничества" пользователя. Наверное, в нем следует написать что-то типа:

<head><title>Доступ запрещен!</title></head>

<body>

<h2>Доступ запрещен!</h2>

Пользователь сделал попытку нелегально вызвать обработчик Apache,

отвечающий за автоматическое подключение библиотекаря. Так как это

свидетельствует о его желании нелегально проникнуть на сервер,

попытка была пресечена. Информация о пользователе записана

в файл журнала.

</body>

В результате

мы пришли к тому, что теперь все документы с расширениями html и htm рассматриваются как сценарии на PHP. Они запускаются уже после того, как подключен библиотекарь, так что могут пользоваться функцией Uses().

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




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