Главная
Друзья!
Мы находимся в процессе большой чистки!
Возможны ошибки и кривизна страниц
Просмотреть всё и быстро не возможно!
Если нашли какую-то ошибку, то если вам не трудно напишите здесь адрес...
Сейчас вы здесь :
http://dwweb.ru/page/php/function/036_poisk_po_saytu_php.html

Поиск по сайту php

Поиск по сайту, поиск по файлам и вообще будем искать на сайте. Давно хотел сделать такую тему, как поиски внутри сайта, внутри файлов. В общем разобраться в теме поиска.

В самом начале давайте разберемся, где будем искать. Мы будем искать в файлах, но в принципе второй вариант, может подойти и как поиск по базе данных.

Но давайте все по порядку.

И сделаем маленькую навигацию по странице…


2.

Поиск по файлам

И второй поиск – это поиск по файлам во всем сайте!

Я не буду вам разжевывать каждую строчку, а лишь расскажу алгоритм.

Получаем все ссылки, а у нас все ссылки нашего сайта есть в карте сайта XML.

Очищаем от всех тегов(preg_match_all), которые присутствуют в карте XML.

array_shift - удаляем первую ячейку - ссылка на главную, она нам не нужна, потмоу, что на ней дублруется часть заголовков, которые уже есть в карте сайта.

Далее удаляем домен во всех ссылках($ALL_pages = preg_replace($patterns, $replacements, $url[1]);).Для чего это делается!?

Мы будем использовать функцию file_get_contents для получения данных со страницы, а у неё есть некоторые нюансы.

1.

Если вы используете относительный путь до страницы http://dwweb.ru/название_страницы.html, то функция вернет полностью загруженную страницу с исполненными скриптами – а это-то, как раз нам и не нужно! Страница – тупо зависнет и попытается получить данные с 300 страниц(на момент написания статьи)… и будет висеть бесконечно!

2.

Если использовать абсолютный путь до файла

$_SERVER[“DOCUMENT_ROOT”] + путь до файла. То мы получим исходный код страницы, а у нас , кроме текста там ничего и нет, что собственно нам и нужно! Это будет загружаться намного быстрее!

Все данные привели к нижнему регистру(mb_strtolower) и поиск и линию. Далее делаем цикл, перебираем наш массив($ALL_pages) на совпадения(strpos). Считаем строки, если цикл прошел один раз прибавляем единицу($line_count), потом её выведем как количество совпадений.

Ну и далее делаем вывод и результатов поиска и сколько строк…

Смотрим собранный код, скопировать в самом низу...

Тестирем, что у нас получилось

<?php

$ALL_pages = file_get_contents('http://dwweb.ru/sitemap.xml');  

preg_match_all("#<loc>(.+?)</loc>#i", $ALL_pages, $url);

//УДАЛЕМ ПЕРВУЮ ЯЧЕКУ СО ЗНАЧЕНИЕМ dwweb.ru

$fruit = array_shift($url[1]);

$patterns1 = "http:\/\/dwweb.ru\/";// что меняем 

$patterns = "/$patterns1/";// что меняем 

$replacements = '/';//На что менняем 

$ALL_pages = preg_replace($patterns, $replacements, $url[1]); //пропускаем через функцияю замены 

 //print_r($ALL_pages);

$home = $_SERVER['DOCUMENT_ROOT'];

If(isset($_POST['poisk'])){ $poisk = $_POST['poisk'];}

$poisk = mb_strtolower( $poisk, 'UTF-8'); 

If(isset($_POST['button']))

{

 for ($i = 0; $i  < count($ALL_pages); $i++) 

 { 

 $new =  file_get_contents($home.$ALL_pages[$i]);  

 $new = mb_strtolower( $new, 'UTF-8');  

   if (strpos($new, $poisk) !== false) 

 {   $line_count += 1;

   

   $parts = explode('::', $line);

   echo  '<a href ="'.$ALL_pages[$i].'" target="_blank">'.$ALL_pages[$i].'</a><br>' ;

   }  }

if(!empty($line_count)){ $vivod_info = 'Всего найдено совпадений по запросу <strong>"'.$poisk.'"</strong> - ' . $line_count; } else { $vivod_info = 'Ничего не найдено...<br>Попробуйте изменить строку поиска.<br>Либо изменить посиковое слово';} 

}

 

?>

<? echo $vivod_info ?>

<form method="POST" action="">

  <input type="text" name="poisk" >

  <input type="submit" name="button" value="ИСКАТЬ"><br>

</form></div>


3.

Поиск по файлам №2

Поиск по файлам №2 аналогичен "Поиск по файлам №1", с той только разницей, что выводятся названия страницы, а не ссылки.

Как это работает!?

На сайте есть файл, куда складываются некоторые данные для формирования главной http://marrex.ru/, там есть ссылки и названия страниц и нам остается только в цикле выводить части строки. И аналогичным путем ползучем все данные со всех страниц.
Не буду вдаваться во все подробности такого поиска и + совместил поиск по заголовкам и во всех файлах в один и вот, что у нас получилось.
Посмотреть пример и скачать можно по ниже идущей ссылке

Скрипт № 15.2
Название скрипта и номер :Поиск по файлам
Пример - Поиск по файлам
Скачать - архив
Все скрипты на одной странице