Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
ТЕХНОЛОГИИ ДОСТ... 63081
Имитационное мо... 58363
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

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

Моделирование литейного цеха на GPSS + Пояснительная записка
База данных студентов на Delphi (файл записей) + Блок схемы
Информационная система - продуктовый магазин на Turbo Pascal (База данны...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Поисковый механизм для вашего сайта на 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 15:47:44 · 0 Комментариев · 6787 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Анимированное поя...
Info
Цветной Grid
Векторный редакто...
Delphi. Разработк...
ZipTV
Print Grid
Binary2XMLDemo (Р...
Генетический алго...
MiniTetris [Исход...
База игр
Панель случайной ...
Применение жадног...
Архив Апгрейтов с...
AntiRus
FileFind
Род Стивенс. Delp...
Последнее загруж...
Run
Turbo Pascal for ...

Топ загрузок
Приложение Клие... 100481
Delphi 7 Enterp... 87905
Converter AMR<-... 20082
GPSS World Stud... 13571
Borland C++Buil... 12072
Borland Delphi ... 8676
Turbo Pascal fo... 7048
Visual Studio 2... 5005
Калькулятор [Ис... 4912
FreeSMS v1.3.1 3545
Случайные статьи
То, что вам не пон...
Принципы организац...
Нумералы
Ввод программ
Инструменты ДЛЯ по...
Таблицы имеют след...
Реализация программы
Клавиатура и мышь
Область применения...
Упражнение 3: защи...
Основные недостатк...
Объяснение решения
Wap сайты - раскру...
Ежемесячные операции
Облегчайте переход
6.9. Ввод и вывод...
Оптимальная сортир...
на отдельных учетн...
Кольцевые топологи...
Выработка решенияП...
Персуазивная инфог...
Создание в среде D...
Задача. Матрица
Реализация адресац...
Поместите все подд...
Статистика



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


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