Показать сообщение отдельно
Старый 25.02.2007, 19:44   #10
saygak
Студент
 
Регистрация: 17.02.2007
Сообщений: 45
Репутация: -5489

По умолчанию Re: Apache изменять код html на лету

Как-то собирался написать и не написал. Была у меня аналогичная ситуация. Вот мой алгоритм действий (може кому на будущее пригодиццо):
Задача была вставить внизу каждой страницы кусок кода, который будет выводить баннер. Менять каждый статический html не охота. Было сделано следующее:

1) Ищем все файлы в которых не закрыт тэг <body>:
for f in `find /home/www/virgtual/sitename -name \*.htm -print`; do grep '</body>' $f > /dev/null; if [ $? -eq 1 ]; then echo $f; fi; done

2) В найденных файлах тэг закрвыаем.

3) Добавляе вот такое в виртуалхост:
ScriptAlias /cgi-bin/ "/home/www/virtual/sitename/cgi-bin/"
AddHandler my-parser-handler htm
Action my-parser-handler /cgi-bin/server_parser

4) Вот такое в файл cgi-bin/server_parser:
PHP код:
#!/usr/bin/perl
print "Content-type: text/html; charset=koi8-r \r\n\r\n";
$param $ENV{PATH_TRANSLATED};

unless (open (REQUEST$param)) {
    print 
"Requested page unavailable\n";
} else {
        @
file = <REQUEST>;
        foreach 
$line (@file){
        if (
$line =~ /<body/){
        print 
$line;
        print <<
CODE
***91;ЗДЕСЬ ПИШЕМ ТО ЧТО НУЖНО ВЫВЕСТИ ВВЕРХУ СТРАНИЦЫ***93;
CODE
;
};

           if (
$line =~ /<\/body>/) {
              print 
"<BR><BR><BR><center><strong><a href=\"http://sitename.org/about/\">Lorem ipsum<br>dolor sit</a></strong></center></body>";
           };

           if (
$line !~ /<body/ or $line !~ /<\/body/) {print $line};

        };
        }; 
Вот так и работает - вверху баннер, внизу слоган.
saygak вне форума   Ответить с цитированием