Заметки / Скрипт поиска по статичному сайту

PHP
 Cтарый сайт на HTML, перенесённый на хостинг с поддержкой PHP, может быть легко усовершенствован функцией поиска.

Для этого достаточно вставить на его главную страницу эту форму:
<form action="search.php" method="get">
<input name="search" size="20" maxlength="50" type="text" />
<input type="submit" value="Искать" />
</form>

И закачать в корневую директорию скрипт поиска search.php следующего содержания:
<!-- Здесь можно вставить HTML -->

<?php

/* Стадия - 1: Читаем директорию со страничками */
if (!empty ($_GET ["search"]))
{
 $mydir="/dir";//dir замените на директорию поиска
 $search=strtolower (urldecode ($_GET ["search"]));
 if ($handle=opendir ($_SERVER["DOCUMENT_ROOT"].$mydir))
 {
  $c=0;
  while (false!==($file=readdir ($handle)))
  {
   $c++;
   $html_file [$c]=$file;
  }
 }

 /* Стадия - 2: Читаем странички, вытягиваем из них текст, alt, title, запоминаем количество соответствий искомомой фразе */
 $html_relevancy=array ();
 $html_match=false;

 for ($i=3; $i<=$c; $i++)
 {
  $html_body=file_get_contents ($_SERVER ["DOCUMENT_ROOT"].$mydir.$html_file [$i]);

  preg_match_all ('/title="(.*)"/Usi', $html_body, $out);
  $html_titles [$i]=join ($out [1]);
  preg_match_all ('/alt="(.*)"/Usi', $html_body, $out);
  $html_alts [$i]=join ($out [1]);

  $html_body=strip_tags ($html_body);

  $temp=substr_count (strtolower ($html_titles [$i].$html_alts [$i].$html_body), $search);
  if ($temp>0)
  {
   $html_relevancy [$i]=$temp;
   $html_match=true;
  }
 }

 /* Стадия - 3: Если найдено хотя бы одно совпадение - сортируем массив по количеству этих самых совпадений */
 if ($html_match==true)
 {
  arsort ($html_relevancy, SORT_NUMERIC);
  reset ($html_relevancy);
  $n=0;
  foreach ($html_relevancy as $key=>$val)
  {
   if ($val>0)
   {
    $n++;
    $html_point [$n]=$key;
   }
  }
 }

 /* Стадия - 4: Финал: выводим результаты поиска */
 if ($n>0)
 {
  print 'Всего найдено по Вашему запросу страниц: '.$n.'<br /><br />';
  for ($i=1; $i<=$n; $i++)
  {
   print '<a href="'.$html_file [$html_point [$i]].'">'.$html_file [$html_point [$i]].'</a>';
   print '<br />';
  }
 }
 else
  print 'Ничего не найдено';
}
else
 print 'Нет поискового запроса';

?>

<!-- Здесь можно вставить HTML -->

После отправки формы появится страница с результатами поиска, выстроенными с учётом релевантности заданному запросу. Внешний вид страницы можно изменить дополнив элементами HTML-кода начало и конец файла search.php.

16.07.2010