Isssi
Вызов скрипта через SSI
Реализация поиска через Server Site Incledes и ISINDEX опирается на тот факт, что в качестве поискового скрипта при ISINDEX, если не указан атрибут action формально вызывается тот же самый документ, в котором ISINDEX указан. Список ключевых слов при этом присоединяется к URL данного документа после символа "?". Это и есть одна из форм HTTP-запроса браузера к серверу по методу доступа GET, которая носит название ISINDEX.
Сам HTML-документ при этом будет выглядеть следующим образом:
<HTML>
<HEAD>
<title>ISINDEX</title>
<isindex prompt="Введите список ключевых слов:">
</HEAD>
<BODY>
<h1>Тестирование контейнера ISINDEX</h1>
</BODY>
</HTML>
Как видно из этого текста, в нем нет даже намека на вызов скрипта. Если все оставить так как есть, то действительно ничего не будет работать, но если вставить HTML-комментарий формата SSI, то тогда мы получим страницу со скриптом:
<HTML>
<HEAD>
<title>ISINDEX</title>
<isindex prompt="Введите список ключевых слов:">
</HEAD>
<BODY>
<h1>Тестирование контейнера ISINDEX</h1>
<hr>
<!--#exec cgi=grep.cgi -->
</BODY>
</HTML>
В данном случае grep.cgi очень простой скрипт. Это просто вызов программ grep по текущему каталогу при условии если указан поисковый критерий, т.е. если есть запрос после "?", то скрипт отработает и выдаст результаты, если нет, то страница останется девственной, т.к. скрипт ничего не подставит вместо себя.
Сама программа grep.cgi при этом может выглядеть примерно следующим образом:
#!/usr/local/bin/perl
print "Pragma: no-cache\n\n";
if(length($ENV{"QUERY_STRING"})==0)
{
die;
}
$str = "grep ".$ENV{"QUERY_STRING"}." \* \|";
open OUT, $str;
while(<OUT>)
{
print $_;
}
close OUT;
В данном случае идея программы проста. Сначала проверяем наличие запроса после символа "?". Этот запрос помещается сервером в переменную окружения QUERY_STRING. Если длина строки в QUERY_STRING равна 0, то запроса нет, в противном случае вызываем команду grep и распечатываем результат ее работы.
При реализации следует учесть, что ключевых слов может быть много, что они могут быть на русском языке, и их придеться перекодировать, что результат работы grep следует предварительно разобрать и подготовить в HTML-формате для размещения внутри страницы.
далее...