Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!

Добавление HTML «на лету»

Вопрос о том, как добавить некий фрагмент HTML-кода к существующим статическим HTML-файлам «на лету» (не модифицируя сами фалы), встречается на форумах так часто, что я решил раскатать здесь об одном, самом простом и доступном, способе.

Задача

Итак, пусть мы имеем набор HTML-файлов вида:

<html>
<body>
<h1>ok</h1>
</body>
</html>

Нам необходимо, выдавая их клиентам, автоматически добавлять после <body> код:

<p>добавленный код</p>

(видимо это некий код, содержащий баннер или рекламу).

Решение

Настройка Web-сервера Apache

Всё, что нам понадобится, это директива Action. Она ассоциирует некий CGI-скрипт с заданным MIME-типом (или PHP-скрипт, или скрипт любой другой природы). Например так:

Action text/html /cgi-bin/translate.cgi

Эту директиву можно использовать где угодно: в основном конфигурационном файле httpd.conf или в локальном .htaccess.

Теперь, при обращение к файлу, имеющему MIME-тип text/html будет вызываться скрипт /cgi-bin/translate.cgi (естественно, только в области действия директивы Action).

Скрипт-обработчик

Приведу пример на Perl, хотя эти действия могут быть произведены на любом языке:

#!/usr/bin/perl
# выдаём заголовок
print "Content-Type: text/html\n\n";
# получаем имя запрашиваемого файла
# из переменной окружения PATH_TRANSLATED
my $file=$ENV{'PATH_TRANSLATED'};
# считываем весь файл
open F, "<$file" or die;
my $content=join('', <F>);
close F;
# производим все необходимые замены
$content=~s{<body>}{<body><p>добавленный код</p>};
# выдаём преобразованный файл клиенту
print $content;

Как видите, полный путь к файлу, который запросил пользователь, передаётся в переменной окружения PATH_TRANSLATED. Скрипт читает, модифицирует и выдаёт этот файл вот в таком виде:

<html>
<body><p>добавленный код</p>
<h1>ok</h1>
</body>
</html>

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

Кроме того, замену я сделал очень просто, мой скрипт не справится с тегом:

<body bgcolor="#999999">

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

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

Если вы ожидаете получить от меня ответ или разъяснение, пожалуйста укажите e-mail, ICQ или другую контактную информацию.
Ваше сообщение не появится на странице, а просто отправится мне.

© 1999 − 2008 Мичурин Алексей — http://www.michurin.com.ru/