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

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,363
новичок: xopumun11
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Поиск пути в графе заданном списками инцедентности на Turbo Pascal
Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
Моделирование интернет магазина (Apache, Php, Html) на GPSS + Блок схема

Поисковый механизм для вашего сайта на 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 October 26 2008 12:47:44 · 0 Комментариев · 8388 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



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

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

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
ZipTV
ScreenSaver [Исхо...
Swing. Эффектные...
Последние загруж...
FileFind
Разработка распре...
CoolControls v3.0...
Х. М. Дейтел, П. ...
Распознавание иде...
VFW
ProLIB18
Керниган Б.В., Ри...
ZipForge
SMExport
Прграммирование в...
Image Browser [Ис...
Применение жадног...
Формирование отче...
Карта сайта
ЯЗЫК ПРОГРАММИРОВ...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97831
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5983
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Указатели "единица"
Связь комментариев...
Есть несколько ста...
Будущее хавбека Ми...
Чтобы узнать колич...
Связывание серверов
Часть 2. Решение
Buylikes
Atari 5200 SuperSy...
СИСТЕМА ОБСЛУЖИВАН...
Функция GetBkColor...
display(X)
Язык С: преобразов...
Вспомогательные ср...
Настройка фотоаппа...
ГЕОТЕРМАЛЬНЫЕ РЕСУРСЫ
Моделирование случ...
Создание пользоват...
Наш метод для onTouch
Выработка решенияП...
Экспериментальный ...
Программа считывае...
Представление внеш...
Depósito e l...
Я хочу, чтобы окно...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?