debugging = true; //стеммеры include("configs/stem.php"); $stemmer = new Lingua_Stem_Ru(); //русский стеммер include("configs/stem_eng.php"); $stemm = new PorterStemmer(); //английский стеммер //проход по директории, где лежат индексные файлы function go_to_index($dir, $word){ global $stemmer; global $stemm; $handle = opendir($dir); //массив, $arr[] - количество слов, найденных в одном файле $arr = array(); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $fr = fopen ($dir . "/" . $file, "r"); flock($fr, LOCK_EX); $r = fread ($fr, filesize ($dir . "/" . $file)); //define("RUS_KEY","йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"); //$num=str_word_count($r,2,RUS_KEY); $num = explode(' ', $r); $count = array_count_values ($num); //с помощью стеммера находим все формы слова внутри файла preg_match_all('/' . preg_quote($stemmer->stem_word($word), '/') . '\\S*/i',$r, $out, PREG_PATTERN_ORDER); $all_value = 0; //для каждого найденного слова определяем его релевантность foreach($out[0] as $value_out){ //существует ли в массиве ключ = словоформам слова if(array_key_exists($value_out, $count)){ //число релевантности слова в текстовом файле $value = $count[$value_out]; //подсчитать количество найденных слов $all_value += $value; } } if($all_value){ $number = $all_value . "|" . $dir . "/" . $file . "
"; //print $number; } /*составление массива чисел, релевантность слова в каждом текст. файле данной директории*/ if($all_value) array_push($arr, $number); flock($fr, LOCK_UN); fclose($fr); } } closedir($handle); return $arr; } $word = "умывальник"; //слово, которое вводит пользователь $id = isset($_GET['id']) ? intval($_GET['id']) : 0; if(!$id){ $indexdir = "./index"; //директория с индекс-файлами //запускаем функцию поиска $arr = go_to_index($indexdir, $word); //сортируем по убыванию полученный массив array_reverse($arr); $total = count($arr); if ($total!=0) echo "Всего найдено страниц: " . $total . "
"; else echo "Ничего не найдено!

Возможно, вы просто неправильно составили запрос. Пожалуйста, прочитайте условия пользования поиском."; foreach($arr as $one){ //удаляем из строки лишнее, оставить только название //получаем массив названий файлов preg_match_all("#\d+\|\./index/(.+?).txt#i",$one,$file); unset($file[0]); //print_r($file[1]); /*теперь названия файлов нужно связать с названиями файлов с базы, чтобы получить id статьи*/ $sql = "SELECT * FROM `texts`"; $res = mysql_query($sql, $link); $quest = array(); while ($row = mysql_fetch_assoc($res)){ $quest[] = $row; $id = $row['id']; } //массив id файлов из базы $sec_arg = array(); $file_name = array(); while (list($k, $v) = each ($file[1])) { $file_name[] = $v; foreach($quest as $qqq){ //названия файлов имеют формат фыва.txt, отсекаем расширение $base_name = strtok($qqq['main_text'], "."); //если название файла = названию файла в базе, //добавляем в массив его id if($base_name == $v) array_push($sec_arg, $qqq['id']); } } //print_r($sec_arg); // вывод результата if(count($file[1]) == count($sec_arg)) $c = array_combine($file[1], $sec_arg); //связываем название файла с его id foreach($c as $key => $value){ print "" . $key . "
"; } } //$smarty->assign("link", $c); //$smarty->display("go_index.tpl"); }else{ //найти id статьи в базе $sql = "SELECT * FROM `texts` WHERE `id` = $id"; $result = mysql_query($sql, $link); while ($row = mysql_fetch_assoc($result)){ $name = $row['main_text']; $name = strtok($name, "."); $mod = $row['id_mod']; /*в зависимости от id модуля выбрать папку, тексты каждого модуля - в отдельной папке*/ switch($mod){ case 0: $folder = "menu"; break; case 11: $folder = "advices"; break; case 13: $folder = "quest"; break; case 4: $folder = "contact"; break; } //открыть нужный текст в нужной папке $filename = "content/" . $folder . "/" . $name . ".txt"; $fp = fopen($filename, "r"); flock($fp, LOCK_EX); $text = fread($fp, filesize($filename)); $head = strtok($text, "\n"); $text = substr($text, strpos($text, ".")+1); $text = nl2br($text); //подключаем стеммеры, подсвечиваем найденные слова preg_match_all("#([A-Яa_я]?)*#i", $word, $out_ru, PREG_PATTERN_ORDER); preg_match_all("#([A-Za_z]?)*#i", $word, $out_eng, PREG_PATTERN_ORDER); if($out_ru[0]){ $text = preg_replace('/' . preg_quote($stemmer->stem_word($word), '/') . '\\S*/i', '\\0', $text); }else{ $text = preg_replace('/' . preg_quote($stemm->Stem($word), '/') . '\\S*/i', '\\0', $text); } flock($fp, LOCK_UN); fclose($fp); } $smarty->assign("a", $head); $smarty->assign("b", $text); $smarty->display("go_index1.tpl"); } ?>