В данной статье я хотел бы поделиться с вами опытом в программировании на php, и показать, как можно довольно просто организовать поиск по-вашему сайту.
И так начнем. Для начала нам понадобится создать список файлов, в которых мы будем искать нужное слово или сочетание нескольких слов. Для этого создадим файл files.dat с именами файлов, в которых будет осуществляться поиск.
Как пример: file1.txt dir1/file2.txt
dir2/file3.txt ... dirn/filen.txt
Для поиска можно использовать следующие функции: ereg и eregi а также функции поиска вхождений регулярных выражений и их преобразования ereg_replace и eregi_replace. Ereg отличается от eregi только тем, что первая ищет без учета регистра символов, а вторая их учитывает. Но так как мы будем осуществлять поиск в текстовых или html файлах предпочтительней для нас использовать «подсветку» искомых слов в выводимом результате, так как это делают многие поисковые системы, и для этого мы воспользуемся двумя последними функциями, т.е. ereg_replace и eregi_replace.
Что бы найти вхождение слова в строку, а именно так мы в дальнейшем представим наши файлы функции поиска, нам нужно составить правильное регулярное выражение, т.е. как бы составит запрос «понятный» функциям ereg_replace и eregi_replace. Для этого нужно немного изучить синтаксис регулярных выражений, но этим вы сможете заняться как-нибудь на досуге, а в данном случае будет что-то вроде этого: "\\0", т.е. здесь я использовал теги и для выделения найденных слов, вы можете использовать любые другие теги. В результате наша функция пока будет выглядеть так:
// $text - текст в котором ищем // $search_text - искомые слова // $use_register - использование регистра function search($text, $search_text, $use_register=false) { if ($use_register) // если учитывать регистр символов { return ereg_replace($search_text,"\\0",$text); // ищем, заменяем, возвращаем } else // если не учитывать регистр символов { return eregi_replace($search_text,"\\0",$text); // ищем, заменяем, возвращаем } return $result; // так, на всякий случай }
Можно так же написать еще одну функцию, для чтения файла (можно использовать в качестве пути URL к файлу) в строку: // $url=~"http://sitename.ru filename /"; // или // $url=~"ftp://user:
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
/filename"; //или //$url=~" filename”; function Remote_file_read($url) { $text=""; $file = @fopen ($url, "r"); if (!$file) { return "-1"; echo "EROR"; //можно удалить exit; } while (!feof ($file)) { $line = fgets ($file, 1024); $text.=$line; } fclose($file); return $text; }
Функцию поиска мы написали, теперь осталось написать код для поиска, он будет выглядеть примерно так: $files_file="files.dat"; $obrezanie=100; //обрезание строки по длинне // $text - текст в котором ищем // $search_text - искомые слова // $use_register - использование регистра function search($text,$search_text,$use_register=false) { if ($use_register) { return ereg_replace($search_text,"\\0",$text); } else { return eregi_replace($search_text,"\\0",$text); } return ""; }
function Remote_file_read($url) { $text=""; $file=@fopen ($url, "r"); if (!$file) { return "READ EROR"; exit; } while (!feof ($file)) { $line=fgets ($file, 1024); $text.=$line; } fclose($file); return $text; }
function Cut_string($text,$search_text) // Функция обрезающая текст { global $obrezanie; $p=strpos($text, "".$search_text.""); $p=$p-$obrezanie; if ($p<0) $p=0; $text=substr($text,$p,$obrezanie*2+strlen("".$search_text."")); return $text; }
// Выводим форму поиска echo " |