Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Фото альбом
Карта сайта

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Раскрутка сайта
-Заработок в Net
-}{акинг
-Разное

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-Книги по }{акингу
-PHP Fusion MOD'ы
-Курсовые
-by Kest
Professional Download System
Услуги
Возможно выполнение лаб
работ
и курсовых на Delphi
и Turbo Pascal, обращаться сюда. Дешево
Программа для рисования блок-схем
Популярные статьи
Гостевая книга ... 16161
Панель случайны... 9319
OpenGL и Delphi... 8476
Создание отчето... 7625
Бип из системно... 6816
Invision Power ... 6076
Видео – залог у... 5540
Установка, нас... 5499
Учебник Паскаль 5391
Анимация в комп... 5385
АЙ СИК Ю? АЙ ХА... 5251
Визуальные фильтры 5174
Вызов хранимых ... 5080
Организация зап... 5017
21 ошибка прогр... 4993
Имитационное мо... 4985
Как зарабоатыва... 4841
ТЕХНОЛОГИИ ДОСТ... 4804
Добавление в фо... 4677
Создание дистри... 4405
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

Пользователей: 1,182
новичок: altynay
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Поисковый механизм для вашего сайта на PHP
Автор: 03.06.2001 - Arsen
Kirillov


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

Очень просто ;-) Создайте поисковую систему по вашему сайту..

В этой статье пойдет речь о том как создать  систему поиска по HTML
документам на интранет - сайте вашей организации или ( или веб - сайте).

Для начала о принципах работы системы.

Каждый HTML документ, который включается в такую систему, должен иметь
специальные мета - теги. Выбор их наименования зависит только от вас, но
желательно использовать нестандартные - для обеспечения возможности
корректировки ваших HTML документов стандартными средствами - например
FrontPage 2000. В принципе это требование не есть обязательным - так как
система поиска будет реагировать и на комментарии в тексте документа.
Однако удобнее все-таки применять стандартные средства создания
мета-тегов.

Итак с чего же начать ? Начать можно с того что ничего не меняя в
структуре вашей информации (месторасположении ваших файлов) , добавить в
ваши html-документы следующие мета - теги:




<html><head>

<meta docsort="Договор">

<meta docname="Договор о совместной деятельности № 126 от 27.05.2001?.">




..Тут идут другие теги...... 

</head> Итак вы видите следующие мета - теги (еще раз напомню что выбор
их имени полностью зависит от вас - но если вы хотите чтобы данная
система поиска  заработала как есть то примените вышеприведенные)

* docname Здесь находиться описание вашего документа. Фактически поиск
идет по этому полю так что надо быть внимательным заполняя его. (Хоть 
можно ввести и дополнительное поле поиска по ключевым словам ) )

* doctype - Вид документа . Здесь вы можете написать что-то вроде
кодифицированного вами типа документа например "Договор" , "Приложение",
"Контракт" ... По этому полю также ведется поиск (перед решающим
сравнением эти два поля "склеиваются" через пробел в одну строку)

* Кроме этих вы можете задействовать в поиске и другие мета теги.

Структура поисковой системы выглядит следующим образом :

* Форма поиска --> Get запрос --> программа на PHP выводящая результаты
поиска в виде HTML документа.

В качестве связующего звена при поиске используеться механизм GET 
запроса. При котором строка поиска будет передана в строке адреса html
документа. Форма для поиска может быть самой простой , например :




<html>

<body>

<form name="main" action="find.php" method="GET">

<input size="25" name="s" value="php">

<input type=submit value="Поиск">

</form>



</body>

</html>  

Внешний вид формы поиска

Начало формы



Конец формы

  После того так вы нажимаете на кнопку "Поиск" переменная "s" через GET
запрос отправляется в программу поиска написанную на PHP. В этой
программе используеться "готовый" класс , в котором собственно и
сосредоточена вся функциональность поисковой системы.

Приведем сокращенный текст класса поисковой системы (который удобно
разместить в отдельном файле вместе с функциями использующимися в этом
классе).

//Исходный текст можно  Скачать на сайте "Программы для Бизнеса".

class search{

//Переменные класса пропущены см. в архиве

function close_search()//Пропущена см. в архиве



//====Рекурсивный проход по каталогу====

function return_htmls($s_in_dir,$what_meta_name,$in_meta_name)

{

//Исключаем служебные каталоги FrontPage 

if (preg_match("/_vti[.]*/i",$s_in_dir)){return;}



if ($dir_handle = @opendir($s_in_dir))

{

while($file = readdir($dir_handle))

{



//Рекурсивный проход по директориям если текущий файл - это директория

if ($file!=".." && $file!="." && is_dir($file))

{

$this->return_htmls($s_in_dir."/".$file,$what_meta_name,$in_meta_name);

}



//Проход по *.ht* файлам в одной директории

if (!is_dir($file) && $file!=".." && $file!="." &&
preg_match("/[.]*\.ht[.]*/i",$file))

{



// Получаем мета-тег docsort

// Функция cyr_up (см. В архиве ) служит для приведения

// маленьких символов кириллицы к прописным и для 

// замены совпадающих символов кириллицы и латинского алфавита

// на латинские прописные

$str_meta_sort=cyr_up(GetMeta("docsort",$s_in_dir."/".$file));



//Если задан поиск по мета-тегам (иначе не будет поиска)

//Введено для возможности расширения функций программы

if ($in_meta_name){

//Имя без типа - для вывода

$str_meta_name=cyr_up(GetMeta("docname",$s_in_dir."/".$file));



//Включаем тип документа - для поиска

$str_meta_name1=$str_meta_name." ".$str_meta_sort; 



//Создаем массив токенов (слов) из входного запроса (переменной формы)

$token_arr=split('[+ ]',$what_meta_name);



//Убиваем повторяющиеся токены

$token_arr=array_keys(array_count_values($token_arr));



//Количество присутствующих в строке токенов

$tok_founded=0;



//Всего токенов найдено

$all_founded=0;





//Поиск

for ($j=0;$j<count($token_arr);$j++)

{

if
($all_founded+=preg_match_all("/".cyr_up($token_arr[$j])."/i",cyr_up($str_meta_name1),$matches_arr))

$tok_founded++;

}



//Вывод токенов

if ($tok_founded==count($token_arr) && strlen(trim($what_meta_name))!=0
&& strlen(trim($str_meta_name))!=0){



//Тут выделяем токены красным цветом

for ($j=0;$j<count($token_arr);$j++)

{

$str_meta_name=preg_replace("/(".cyr_up($token_arr[$j]).")/i","<font
color=\"red\">\\1</font>",cyr_up($str_meta_name));

$str_meta_sort=preg_replace("/(".cyr_up($token_arr[$j]).")/i","<font
color=\"red\">\\1</font>",cyr_up($str_meta_sort));

}

echo "<li><p class=\"B\"><a class=\"n\"
href=\"".$s_in_dir."/".$file."\">/$this->count.<b>$str_meta_sort</b>
\"$str_meta_name\" /$all_founded/</a></li><br></p>\n";

$this->found_in_metaname++;

$this->count++;

}



}





}



closedir($dir_handle);

}



}





//end class

}

?>

<html>

<link rel="stylesheet" type="text/css" href="css/sm.css">

<body>

<?

$qu = getenv("QUERY_STRING");parse_str(substr($qu,0,100));

if (!isset($s)){$s="";};

//echo ();



$s=preg_replace("/[\\041-\\055\/]*/","",$s);

$s=preg_replace("/\./","\\\056",$s);





$show=new search;

$show->count=1;

$show->found_in_metaname=0;

$show->return_htmls(".",$s,1);

$show->close_search();

?>

</body>

</html> Для перебора всех файлов в каталоге класса
return_htmls(".",$s,1); В качестве параметров ей передаеться имя
начального каталога (с которого начинать обход) , поисковая строка и
флаг (поиск в мета - тегах) который должен быть равен 1 - для поиска в
мета тегах.

* Алгоритм работы функции следующий:

Функция проходит текущий каталог и если находит файл то берет его мета-
теги и ищет в них ключевые слова. Поиск ведеться с помощью RegExp -ов
следующим кодом:

//Поиск

for ($j=0;$j<count($token_arr);$j++)

{

if
($all_founded+=preg_match_all("/".cyr_up($token_arr[$j])."/i",cyr_up($str_meta_name1),$matches_arr))

$tok_founded++;

}

Функция  preg_match_all производит Perl-совместимый полный поиск в мета
- тегах документа ( $str_meta_name1)

* Если слова найдены то выводит производиться "подсветка" мета-тегов с
помощью :

for ($j=0;$j<count($token_arr);$j++)

{

$str_meta_name=preg_replace("/(".cyr_up($token_arr[$j]).")/i","<font
color=\"red\">\\1</font>",cyr_up($str_meta_name));

$str_meta_sort=preg_replace("/(".cyr_up($token_arr[$j]).")/i","<font
color=\"red\">\\1</font>",cyr_up($str_meta_sort));

}

Используется функция функция замены по регулярному выражению 
preg_replace () которая производит замену найденых токенов на них же
только выделенных красным цветом (<font color=\"red\">\\1</font>) 

* и вывод в html ссылки на документ. В конце выводиться количество
найденых токенов в мета - тегах документа. 

* Если же файл являеться директорией то функция вызывает саму себя но в
качестве параметров передает уже новое имя директории + флаги поиска :

 if ($file!=".." && $file!="." && is_dir($file))

{

$this->return_htmls($s_in_dir."/".$file,$what_meta_name,$in_meta_name);

}

* Цикл продолжается пока не будут пройдены все файлы и каталоги
указанные при вызове функции.

Поиск ведеться по нескольким словам. Для разбиения поисковой фразы на
токены (слова) применяется следующий код:

* //Создаем массив токенов (слов) из входного запроса (переменной формы)

$token_arr=split('[+ ]',$what_meta_name);

* //Убиваем повторяющиеся токены 

$token_arr=array_keys(array_count_values($token_arr));

Повторяющиеся токены забираются как для того чтобы ускорить поиск , -так
и для того чтобы не было ошибок при выделении токенов в результатах
поиска. 

* Ссылки по теме: 

- Текст скриптов из данной статьи можно  взять в архиве сайта  Скачать
>>>

- Статьи по PHP на сервере "Программы для бизнеса" Перейти >>>

- Раздел "ИнтраNET" на сервере "Программы для бизнеса" Перейти >>>

- Раздел "Программирование" на сервере "Программы для бизнеса" Перейти
>>>

В конце статьи хочется отметить что программа работает как на Windows
так и на UNIX , благодаря применению функций приведения мета-тегов и
строки запроса к верхнему регистру. Кроме того из поиска исключаться
стандартные каталоги FrontPage 2000  (с помощью:  if
(preg_match("/_vti[.]*/i",$s_in_dir)){return;} ).

Опубликовал Kest Октябрь 26 2008 15:47:44 · 0 Комментариев · 1101 Прочтений · Для печати
Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* 8 + 4=
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Загрузки
Новые загрузки
База данных: Книж...
Пример работы с р...
Добавление басса ...
Моделирование дви...
Черный круг двига...

Случайные загрузки
Fig [Исходник на ...
ProLIB18
NetGraph [Исходни...
DFileDeleter
Современное проек...
Самоучитель PHP 5...
Delphi. Разработк...
PHP в примерах
PrevInst
Plasma
Программа предназ...
Midi
Проигрыватель Mp3
PCX
Фундаментальные а...
ATComponents
Image Browser [Ис...
Dreamsoft Progres...
Запрет гостям ск...
Книга по Delphi (...

Топ загрузок
Converter AMR<-... 13141
FreeSMS v1.3.1 2550
WebReg v1.3 882
Delphi 7 Enterp... 846
Turbo Pascal fo... 765
GamesBase 3.0 636
RxLIB 291
Borland Delphi ... 287
CoolControls v3... 278
RbControls 263
Случайные статьи
Коллективное владение
1.3. Переменные
Запись текста в до...
Функции ввода/вывода
Определить номера ...
Как оптимизировать...
Постановка задачи ...
Программирование в...
Представление дере...
Как выделить облас...
Integer or real ex...
Добавляем к титлам...
"Введите число, из...
Создание иконки пр...
Небольшие версии
REALLOCATE (ПЕРЕРА...
Функция GetBkColor...
Безопастность Dial...
Вычисление чисел Ф...
Удаление элементов...
Коллекция объектов...
Наследование
Популярно о PageRank
Визуальные фильтры
Пирамидальная сорт...
Статистика



Друзья сайта
Бесплатные программы
Программы, игры
Создание игр, графика, программирование